从函数返回具有列定义的记录

Posted

技术标签:

【中文标题】从函数返回具有列定义的记录【英文标题】:Return record with column definition from a function 【发布时间】:2014-07-29 13:44:52 【问题描述】:

我知道 Postgres 允许返回预定义的复合数据类型、记录和带有列定义的表。

但是我没有设法返回带有定义列的简单记录,所以我总是使用表,即使我知道这只会返回一行。

所以我的函数定义看起来像这样:

CREATE OR REPLACE FUNCTION name(p_param1 text, p_param2 json)
    RETURNS TABLE(
       col1    bigint,
       col2    integer,
       col3    integer
    )

如果我尝试以失败的方式返回记录:

CREATE OR REPLACE FUNCTION name(p_param1 text, p_param2 json)
    RETURNS RECORD(
       col1    bigint,
       col2    integer,
       col3    integer
    )

这在 Postgres 中是不可能的吗? 我知道我可以只声明一个自定义复合数据类型,但我不想为每个返回记录的函数声明一个类型。

【问题讨论】:

使用OUT参数怎么样?这就是你要找的东西吗? 是的 - 非常感谢!! 【参考方案1】:

您正在寻找OUT参数:

CREATE OR REPLACE FUNCTION name(
        p_param1 text
  ,     p_param2 json
  , OUT col1 bigint
  , OUT col2 integer
  , OUT col3 integer)
  RETURNS record AS ...

区别:这种形式只返回一行,而 RETURNS TABLE 返回 0-n 行。 更多:

Returning from a function with OUT parameter

【讨论】:

非常感谢!!!它的语法对我来说很奇怪,但它正是我想要的!

以上是关于从函数返回具有列定义的记录的主要内容,如果未能解决你的问题,请参考以下文章

从返回表(或记录集)的函数中检索列

从用户定义的函数中消除空查询结果

Laravel 5 具有雄辩的关系回调函数返回错误记录

Oracle 11g - 如何使用表连接从函数返回记录

R:基于自定义距离函数和多个条件快速匹配记录

如何从函数返回表的行类型和附加列?