create procedure getdata(result_one inout refcursor, result_two inout refcursor)
as
$$
begin
open result_one for
select *
from (values (1,2,3), (4,5,6)) as t(a,b,c);
open result_two for
select *
from (values ('one'),('two'),('three'),('four')) as p(name);
end;
$$
language plpgsql;
但是,显示结果有点麻烦 - 至少在psql:
postgres@localhost/postgres> \set AUTOCOMMIT off
postgres@localhost/postgres> call getdata(null, null);
result_one | result_two
--------------------+--------------------
<unnamed portal 1> | <unnamed portal 2>
(1 row)
postgres@localhost/postgres> fetch all "<unnamed portal 1>";
a | b | c
---+---+---
1 | 2 | 3
4 | 5 | 6
(2 rows)
postgres@localhost/postgres> fetch all "<unnamed portal 2>";
name
-------
one
two
three
four
(4 rows)
postgres@localhost/postgres>
您可以从一个过程返回多个结果集 - 类似于使用函数始终可以实现的方式:
但是,显示结果有点麻烦 - 至少在
psql
:不过,一些 SQL 客户端可以自动显示结果。
不。我认为博客文章是指“程序中的动态结果集”补丁,它没有进入发布版本。