我正在使用 postgres 函数在表中插入多行。 我必须返回插入行的所有 ID。
我的函数如下
CREATE OR REPLACE FUNCTION insert_multiple_rows(temp integer)
RETURNS integer[]
LANGUAGE 'plpgsql'
VOLATILE
PARALLEL UNSAFE
COST 100
AS $BODY$DECLARE
company_ids_list integer[];
BEGIN
INSERT INTO company VALUES
(default,now(),temp),
(default,now(),temp),
(default,now(),temp),
(default,now(),temp)
RETURNING id INTO company_ids_list;
RETURN company_ids_list;
END;
$BODY$;
当我尝试使用
调用此函数时 select insert_multiple_rows(58);
获取错误
ERROR: query returned more than one row
CONTEXT: PL/pgSQL function create_company_budget_allocation(integer)
line 4 at SQL statement
SQL state: P0003
最佳答案
SELECT .. INTO
或 INSERT ... RETURNING ... INTO
只能填充单个变量。如果查询返回多行,您将收到您观察到的错误。
您可以在 CTE 中使用 INSERT
语句并使用 array_agg
构造结果数组:
WITH ins AS (
INSERT INTO company VALUES
(default,now(),temp),
(default,now(),temp),
(default,now(),temp),
(default,now(),temp)
RETURNING id)
SELECT array_agg(id) INTO company_ids_list
FROM ins;
关于arrays - 如何从 Postgres 函数返回新创建的 ids 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481646/