我正在使用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
答案 0 :(得分:2)
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;