如何在postgreSQL中填充集合
我对PostgreSQL非常陌生,正在从事迁移任务。我正在寻找PostgreSQL中“批量收集到”语法的替代方法,或者如何在PostgreSQL中实现此功能如何在postgreSQL中填充集合,postgresql,Postgresql,我对PostgreSQL非常陌生,正在从事迁移任务。我正在寻找PostgreSQL中“批量收集到”语法的替代方法,或者如何在PostgreSQL中实现此功能 CREATE FUNCTION test."printEmpIds"() RETURNS test.emp_add LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ declare empIds test.emp_add; begin select ids bulk collect e
CREATE FUNCTION test."printEmpIds"()
RETURNS test.emp_add
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
declare
empIds test.emp_add;
begin
select ids bulk collect empIds from test.emp;
-- for idx in 1..empIds.count loop
-- raise notice '%%%', empIds.idx;
-- end loop;
return empIds;
end;
$BODY$;
ALTER FUNCTION test."printEmpIds"()
OWNER TO postgres;
基本上,我希望将emp表中的所有ID填充到用户定义的集合EMPID中并返回
任何帮助都是值得的?在Postgres中,您可以通过从select执行
array\u AGG
返回整数数组INT[]
测试数据
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)
knayak=# select printempids ();
printempids
-------------
1
2
3
(3 rows)
要将它们作为行,可以执行以下操作
select * FROM UNNEST(printempids ()) as id;
虽然此功能可以使用集合复制Oracle的表
功能,但我建议您在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}
(1 row)
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;