首页 > 解决方案 > 如何返回另一个 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)的背景。

标签: sqlpostgresqlplpgsql

解决方案


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

它更容易使用

RETURN QUERY SELECT func();

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

PL/pgSQL 在语法上与 C++ 完全不同。它复制了 Oracle 的 PL/SQL,而后者又源自 ADA。


推荐阅读