什么是“非SETOF函数”?

13

进入 PL/pgSQL ...

我仍在学习语法。有时候,我会遇到以下错误信息:

ERROR: cannot use RETURN QUERY in a non-SETOF function

这听起来有点神秘,我在 Postgres 文档中找不到相关信息。因此,问题是:

  • 什么是非 SETOF 函数?

同样地,假设有这样的东西,什么是 SETOF 函数?

2个回答

11
什么是非SETOF函数?
这是一个返回单个(标量)值的函数,例如一个整数或一个varchar。
select upper('foo')` 

upper()是一个“非SETOF”函数,它只返回单个值。因此,如果一个函数被定义为returns integer,它不能返回SELECT查询的完整结果,而需要使用return 42;,但不能使用return query ...


什么是SETOF函数?

它是一个返回结果集的函数,类似于表格(通常声明为returns table (...))。您可以像使用表格一样使用它:

select *
from some_set_returning_function();

1
只是补充一下,返回一行也会使函数“非SETOF”。 - lucastamoios

1
根据文档所述:

通过将函数的返回类型指定为SETOF sometype或等效地声明为RETURNS TABLE(columns),可以声明SQL函数返回一组(即多行)。在这种情况下,将返回最后一个查询结果的所有行。

例如,如果它返回一行或标量,则为非SETOF。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接