我有一个功能func1(integer);
它返回行:partid,qty
例如:
select * from func1(1);
partid,qty
10 50
20 30
select * from func1(2);
partid,qty
10 5
20 30
11 10
我需要编写一个函数,通过结果调用func1和数组。 func2(integer[]);
例如:
select * from func2(array[1,2]);
应该给出:
partid,qty
10 55
20 60
11 10
我写了这个:
CREATE OR REPLACE FUNCTION func2(listx integer[])
RETURNS SETOF records_d AS
$BODY$
declare
item integer;
begin
foreach item in array listx loop
select * from func1(item);
end loop;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
record_d是类型(整数,整数)
这个函数不起作用...我不知道如何结合func1()的不同迭代结果,然后返回它们。
答案 0 :(得分:1)
您不需要其他功能,您可以在一个SQL语句中执行此操作:
select f.partid, sum(f.qty)
from unnest(array[1,2]) i, func1(i) f
group by f.partid;
SQLFiddle示例:http://sqlfiddle.com/#!15/8b083/1
答案 1 :(得分:0)
因为它经常使用postgres,它有RETURN NEXT子句,这正是你想要的。
我认为您必须调整代码以将innes select的结果转换为records_d类型。但是RETURN NEXT就是你想要的。
CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS
$BODY$
DECLARE
r foo%rowtype;
BEGIN
FOR r IN SELECT * FROM foo
WHERE fooid > 0
LOOP
-- can do some processing here
RETURN NEXT r; -- return current row of SELECT
END LOOP;
RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;