如何在plpgsql函数中存储中间结果?

时间:2018-01-13 09:50:38

标签: postgresql

我有一个表my_table和一个相应的函数:

create function my_function() returns setof my_table as
$$
    select my_table.*
    from   my_table
    where  ...;
$$
language sql stable;

现在我想在另一个plpgsql函数中使用该函数。我想存储my_function()的结果,以便继续处理数据。如何在PostgreSQL中完成?我尝试了以下方法:

create function my_other_function() returns setof my_table as
$$
    declare
        results setof my_table;
    begin
        results := (select * from my_function());

        ...
    end;
$$
language plpgsql stable;

然而,这会在setof my_table中出现my_other_function()无效类型的错误,这有点奇怪,因为它是my_function()中的有效返回类型?

1 个答案:

答案 0 :(得分:2)

您可以使用数组:

create function my_other_function() 
  returns setof my_table 
as
$$
declare
  results my_table[];
begin

  select array_agg(t)
    into results
  from my_function() t;

  return query 
    select *
    from unnest(results);
end;
$$
language plpgsql stable;