Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回多个表的postgresql存储过程_Postgresql_Plpgsql - Fatal编程技术网

返回多个表的postgresql存储过程

返回多个表的postgresql存储过程,postgresql,plpgsql,Postgresql,Plpgsql,我有一个函数需要从多个表返回结果。现在在Postgresql 9.1中是否可以这样做,并计划很快迁移到9.2?如果是,如何进行 比如说 create or replace function f1() returns ??? as $body$ begin return query select x.* from users x; return query select x.* from user_preferences x join users y

我有一个函数需要从多个表返回结果。现在在Postgresql 9.1中是否可以这样做,并计划很快迁移到9.2?如果是,如何进行

比如说

create or replace function f1()
returns ???
as $body$ begin
    return query select x.*
        from users x;
    return query select x.*
        from user_preferences x join users y using(user_id) ; -- more where clauses
    return query select x.*
        from user_permissions x join users y using(user_id) ; -- more clauses
end; $body$ language 'plpgsql';
我考虑的备选方案是:做用户和用户偏好的笛卡尔乘积等,但这将导致巨大的结果表和真正复杂的代码。b首先对用户进行选择,然后迭代用户列表,并根据用户的属性进行额外的迭代,但这将导致太多的数据库调用。而且,我为什么要编写SQL如此擅长的代码呢

是否有一种简洁的方法可以从pg函数中获得多个结果集?我已经搜索了postgresql文档,但找不到任何指导


非常感谢。

因为在编写本文时,Pg不支持存储过程,只支持从SQL调用的函数,所以没有直接返回多个结果集的规定

但是,可以将函数定义为返回集合refcursor。该函数可以创建多个临时表,为每个表打开一个游标并返回游标


这有点笨拙,但很有效。

因为在编写本文时,Pg不支持存储过程,只支持从SQL调用的函数,所以没有直接返回多个结果集的规定

但是,可以将函数定义为返回集合refcursor。该函数可以创建多个临时表,为每个表打开一个游标并返回游标

这有点笨拙,但很有效