PostgreSQL 中的“非 SETOF 函数”是什么?

Fab*_*ert 17 sql database postgresql plpgsql return-query

进入PL/pgSQL\xe2\x80\xa6

\n\n

我还在学习语法。有时,我会遇到以下错误消息:

\n\n
\n

错误:无法在非 SETOF 函数中使用 RETURN QUERY

\n
\n\n

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

\n\n
    \n
  • 什么是非 SETOF 函数?
  • \n
\n\n

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

\n

小智 13

什么是非 SETOF 函数?

它是一个返回单个(标量)值的函数,例如 aninteger或 a varchar,例如

select upper('foo')` 
Run Code Online (Sandbox Code Playgroud)

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


什么是 SETOF 函数?

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

select *
from some_set_returning_function();
Run Code Online (Sandbox Code Playgroud)