【问题标题】:What is a "non-SETOF function"?什么是“非 SETOF 函数”?
【发布时间】:2022-01-07 01:28:54
【问题描述】:

进入 PL/pgSQL……

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

错误:不能在非 SETOF 函数中使用 RETURN QUERY

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

  • 什么是非 SETOF 函数?

同样,假设有这样的事情,什么是 SETOF 函数?

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    什么是非 SETOF 函数?

    这是一个返回单个(标量)值的函数,例如integervarchar,例如

    select upper('foo')` 
    

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


    什么是 SETOF 函数?

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

    select *
    from some_set_returning_function();
    

    【讨论】:

    • 只是添加,返回一行也会使函数“非 SETOF”。
    【解决方案2】:

    正如documentation 所说:

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

    例如,如果它返回一行或一个标量,它将是一个非 SETOF。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多