У меня есть функция 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(), а затем вернуть их.
return query select * from func1(item)
и выполнить группировку во внешнем запросе:SELECT partid,sum(qty) as qty FROM func2(array[1,2]) GROUP BY partid
- person Ctx   schedule 04.01.2016func1()
для поддержки массива? Можете ли вы показать нам кодfunc1()
и запрос, который он выполняет? - person a_horse_with_no_name   schedule 04.01.2016select partid,sum(qty) from (select partid,qty from func1(2) union all select partid,qty from func1(1)) t group by partid
? - person a_horse_with_no_name   schedule 04.01.2016