【发布时间】:2022-01-07 01:28:54
【问题描述】:
进入 PL/pgSQL……
我还在学习语法。有时,我会遇到此错误消息:
错误:不能在非 SETOF 函数中使用 RETURN QUERY
这听起来有点神秘,我在 Postgres 文档中找不到信息。因此问题是:
- 什么是非 SETOF 函数?
同样,假设有这样的事情,什么是 SETOF 函数?
【问题讨论】:
标签: postgresql plpgsql
进入 PL/pgSQL……
我还在学习语法。有时,我会遇到此错误消息:
错误:不能在非 SETOF 函数中使用 RETURN QUERY
这听起来有点神秘,我在 Postgres 文档中找不到信息。因此问题是:
同样,假设有这样的事情,什么是 SETOF 函数?
【问题讨论】:
标签: postgresql plpgsql
什么是非 SETOF 函数?
这是一个返回单个(标量)值的函数,例如integer 或 varchar,例如
select upper('foo')`
upper() 是一个“非 SETOF”函数,它只返回一个值。所以一个功能是例如定义为returns integer不能返回SELECT查询的完整结果,需要使用return 42;但不能使用return query ...;
什么是 SETOF 函数?
它是一个返回结果集的函数——类似于表格(通常声明为returns table (...)。您可以像表格一样使用它:
select *
from some_set_returning_function();
【讨论】:
正如documentation 所说:
可以通过将函数的返回类型指定为
SETOF sometype或等效地将其声明为RETURNS TABLE(columns)来声明一个SQL 函数返回一个集合(即多行)。在这种情况下,将返回最后一个查询结果的所有行。
例如,如果它返回一行或一个标量,它将是一个非 SETOF。
【讨论】: