Din*_*esh 1 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 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';
Run Code Online (Sandbox Code Playgroud)
我考虑的替代方案是:(a)做一个用户和user_preferences(等)的笛卡尔积,但这将导致一个巨大的结果表和一个真正复杂的代码.(b)首先对用户进行选择,然后迭代用户列表并根据其属性进行额外的迭代,但这将导致太多的数据库调用.而且,为什么我要编写SQL非常擅长的代码?
是否有一种简洁的方法可以从pg函数中获取多个结果集?我搜索了postgresql文档但找不到任何指导.
非常感谢.
因为Pg(在编写本文时)不支持存储过程,只能从SQL调用,所以没有直接返回多个结果集的规定.
但是,您可以将函数定义为RETURNS SETOF refcursor.该函数可以创建多个临时表,为每个表打开一个游标并返回游标.
这有点笨拙,但有效.
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |