进入 PL/pgSQL ...
我仍在学习语法。有时候,我会遇到以下错误信息:
ERROR: cannot use RETURN QUERY in a non-SETOF function
这听起来有点神秘,我在 Postgres 文档中找不到相关信息。因此,问题是:
- 什么是非 SETOF 函数?
同样地,假设有这样的东西,什么是 SETOF 函数?
进入 PL/pgSQL ...
我仍在学习语法。有时候,我会遇到以下错误信息:
ERROR: cannot use RETURN QUERY in a non-SETOF function
这听起来有点神秘,我在 Postgres 文档中找不到相关信息。因此,问题是:
同样地,假设有这样的东西,什么是 SETOF 函数?
select upper('foo')`
upper()
是一个“非SETOF”函数,它只返回单个值。因此,如果一个函数被定义为returns integer
,它不能返回SELECT查询的完整结果,而需要使用return 42;
,但不能使用return query ...
。
什么是SETOF函数?
它是一个返回结果集的函数,类似于表格(通常声明为returns table (...)
)。您可以像使用表格一样使用它:
select *
from some_set_returning_function();
例如,如果它返回一行或标量,则为非SETOF。通过将函数的返回类型指定为
SETOF sometype
或等效地声明为RETURNS TABLE(columns)
,可以声明SQL函数返回一组(即多行)。在这种情况下,将返回最后一个查询结果的所有行。