В Postgres вы можете вернуть массив целых чисел INT[]
, выполнив ARRAY_AGG
из выбора
Тестовые данные
create table emp ( ids INTEGER );
insert into emp(ids) values(1),(2),(3);
Функция
CREATE OR REPLACE FUNCTION printempids ()
RETURNS INT[]
LANGUAGE plpgsql
COST 100 volatile as $body$
declare empids int[];
BEGIN
SELECT array_agg(ids) INTO empids
FROM emp;
RETURN empids;
END;
$body$;
Результат
knayak=# select printempids ();
printempids
-------------
{1,2,3}
(1 row)
Чтобы получить их в виде строк, вы можете сделать
select * FROM UNNEST(printempids ()) as id;
Хотя эта функцияможет реплицировать функциональность Oracle TABLE
, используя коллекцию, я бы предложил вам использовать RETURNS TABLE
и RETURN QUERY SELECT ..
вместо этого в Postgres.
CREATE OR REPLACE FUNCTION printempids ()
RETURNS TABLE ( p_ids INT )
LANGUAGE plpgsql
COST 100 volatile as $body$
declare empids int[];
BEGIN
RETURN QUERY SELECT ids
FROM emp;
END;
$body$;
Результат
knayak=# select printempids ();
printempids
-------------
1
2
3
(3 rows)
Или простая функция SQL также работает.
CREATE OR REPLACE FUNCTION printempids ()
RETURNS TABLE ( ids INT ) as
$body$
SELECT ids FROM emp;
$body$ LANGUAGE SQL
COST 100 volatile;