在plpgsql中,我想使用查询A的结果来执行多个查询(查询B),并将所有B查询的结果作为一个表返回,但我不知道如何执行此操作。我是否在plpgsql中使用“RETURN QUERY”功能?
这是一个例子。该函数查找具有给定代码的所有zip_code记录,然后在所有位置搜索该原始zip_code的状态。 (我知道当前查询可以通过连接完成,但我的ACTUAL查询需要此功能。)
begin;
create OR REPLACE function t() returns setof locations as
$$
declare z zip_codes%rowtype;
begin
for z in select * from zip_codes where code like '%32301%'
LOOP
return query select * from locations where locations.state like z.state; #query B
# All I want to do is return the results from all of the above queries as one
# result set.
END LOOP;
return;
end
$$
language 'plpgsql';
commit;
知道我是怎么做到的吗?
答案 0 :(得分:2)
您可以创建一个临时表,用每个循环的结果填充它,最后返回临时表的内容。
select * into temporary resulttbl from locations where 1 = 2
...
loop
insert into resulttbl select ...
end loop
...
return query select * from resulttbl
修改
或者您可以在问题中使用您的代码段。它应该工作(就像你在评论中说的,文档说它可以做到这一点)。你有错吗?
答案 1 :(得分:0)
考虑直接使用单个语句返回行:
return query
select locations.*
from locations
join zip_codes on zip_codes.state = locations.state
where zip_codes like '%32301%';