1

假设我们有一张简单的桌子

create table a (id serial, data text);

和以下功能:

create or replace function f()
returns SETOF int As
$BODY$
DECLARE
  l_arr int[];
BEGIN

  insert into a(data) 
  values ('a') 
  returning array_agg(data) into l_arr; --THIS DOES NOT WORK

  RETURN l_arr;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER
  COST 100

如何在同一个 SQL 语句中将插入的值收集到一个数组中?

4

1 回答 1

1

看来,可以在没有中间数组的情况下使用 RETURN QUERY:

create or replace function f()
returns SETOF int As
$BODY$
BEGIN
  RETURN QUERY
  insert into a(data) 
  values ('a') 
  returning id;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER
  COST 100
于 2012-10-09T13:05:38.193 回答