如何在PostgreSQL中填充集合 [英] How to populate a collection in postgreSQL
问题描述
我是PostgreSQL的新手,正在从事迁移任务。我正在寻找PostgreSQL中批量收集语法的替代方法,或者如何在PostgreSQL中实现此功能。
创建功能测试。 printEmpIds()
返回test.emp_add
语言'plpgsql'
成本100
波动性
作为$ BODY $
声明
empIds test.emp_add;
开始
选择ID从test.emp批量收集empId;
-1..empIds.count循环中的idx
-引发通知 %%%,empIds.idx;
-结束循环;
return empIds;
结尾;
$ BODY $;
ALTER FUNCTION测试。 printEmpIds()
属于postgres;
基本上我想将emp表中的所有id填充到用户定义的集合empIds中并返回
有什么帮助吗?
在Postgres中,您可以返回一个数组整数 INT []
通过从select
<中选择
ARRAY_AGG
p> 测试数据 创建表emp(ids INTEGER);
插入emp(ids)values(1),(2),(3);
功能
创建或替换功能printempids()
返回INT []
语言plpgsql
成本为100的变量,因为$ body $
声明了empids int [];
BEGIN
选择array_agg(ids)INTO实例
FROM emp;
RETURN pids;
END;
$ body $;
结果
knayak =#选择printempids();
printempids
-------------
{1,2,3}
(1行)
要使其成行,您可以这样做
选择* FROM UNNEST(printempids())作为id;
尽管此功能可以复制Oracle的 TABLE
功能使用集合时,建议您在Postgres中使用 RETURNS TABLE
和 RETURN QUERY SELECT ..
。
创建或替换功能printempids()
返回表(p_ids INT)
语言plpgsql
成本100易失,因为$ body $
声明了empids int [];
开始
返回查询选择ID
FROM emp;
END;
$ body $;
结果
knayak =#选择printempids();
printempids
-------------
1
2
3
(3行)
也可以使用简单的SQL函数。
创建或替换功能printempids()
RETURNS TABLE(ids INT)as
$ body $
从emp选择ID;
$ body $语言SQL
成本100易变;
I am very new to PostgreSQL and I am working on migration task. I am looking for an alternative of "bulk collect into" syntax in PostgreSQL or how I can achieve this functionality in 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 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;
Basically I want to populate all ids from emp table into user defined collection empIds and return
Any help would be appreciable?
In Postgres, you may return an array of integers INT[]
by doing an ARRAY_AGG
from select
Test data
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)
To get them as rows, you may do
select * FROM UNNEST(printempids ()) as id;
Although this feature can replicate Oracle's TABLE
functionality using a collection, I would suggest you to use RETURNS TABLE
and RETURN QUERY SELECT ..
instead in 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)
Or a simple SQL function also works.
CREATE OR REPLACE FUNCTION printempids ()
RETURNS TABLE ( ids INT ) as
$body$
SELECT ids FROM emp;
$body$ LANGUAGE SQL
COST 100 volatile;
这篇关于如何在PostgreSQL中填充集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!