在 Postgres 中,您可以返回一个整数数组INT[]
通过做一个ARRAY_AGG
从选择
测试数据
create table emp ( ids INTEGER );
insert into emp(ids) values(1),(2),(3);
Function
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$;
Result
knayak=# select printempids ();
printempids
-------------
{1,2,3}
(1 row)
要将它们作为行,您可以这样做
select * FROM UNNEST(printempids ()) as id;
虽然这个功能可以复制Oracle的TABLE
使用集合的功能,我建议您使用RETURNS TABLE
and 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$;
Result
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;