如何返回另一个plpgsql函数的内容?

时间:2018-09-19 19:18:53

标签: sql postgresql plpgsql

我有一个plpgsql函数func,它返回一个setof integer。我现在有另一个函数func2,该函数应调用并返回func。我应该在这里使用return next func()还是return query select func()?执行和性能上有区别吗?还是我应该做些其他事情?

create function func2() returns setof integer as $$
begin
    if true then -- logic omitted here
        return next func();
        -- return query select func();
    end if;
end;
$$ language plpgsql;

我知道我可以将func()的结果存储到本地声明的变量中,但是我认为这里不需要。如果我错了,请纠正我。

我通读了文档,只能找到return nextreturn query select作为返回本地声明的变量的替代方法。但是我不清楚在这种情况下两者之间是否存在差异。

边注,return func()似乎是不可能的,这令人惊讶,它来自常规过程语言(主要是C ++和Java)的背景。

1 个答案:

答案 0 :(得分:1)

RETURN NEXT func()不起作用,因为那只能返回一个值。为此,您必须遍历func()的结果,并用RETURN NEXT返回每个结果,这不必要地复杂。

使用起来更容易

RETURN QUERY SELECT func();

在单个语句中返回func()的所有结果值。

PL / pgSQL的语法与C ++完全不同。它复制了Oracle的PL / SQL,而PL / SQL又是从ADA派生的。