我有一个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 next
和return query select
作为返回本地声明的变量的替代方法。但是我不清楚在这种情况下两者之间是否存在差异。
边注,return func()
似乎是不可能的,这令人惊讶,它来自常规过程语言(主要是C ++和Java)的背景。
答案 0 :(得分:1)
RETURN NEXT func()
不起作用,因为那只能返回一个值。为此,您必须遍历func()
的结果,并用RETURN NEXT
返回每个结果,这不必要地复杂。
使用起来更容易
RETURN QUERY SELECT func();
在单个语句中返回func()
的所有结果值。
PL / pgSQL的语法与C ++完全不同。它复制了Oracle的PL / SQL,而PL / SQL又是从ADA派生的。