【问题标题】:Return table with columns [duplicate]返回带有列的表[重复]
【发布时间】:2018-05-14 20:35:04
【问题描述】:

这是一个给出预期结果的简单查询。

select 1.1 as x, 1.1 as y;
x  |  y
-----+-----
1.1 | 1.1
(1 row)

这里同样的查询被放置在一个函数中。

CREATE OR REPLACE FUNCTION foo4(param integer) 
RETURNS TABLE(x float, y float) AS
$$
DECLARE var float;
BEGIN
  var = 1.1;
  RETURN QUERY select var as x, var as y;
END;
$$
LANGUAGE 'plpgsql';

这是输出:

select foo4(4);
foo4
-----------
(1.1,1.1)
(1 row)

为什么函数输出数据的方式不同?如何将函数输出分成两列?

使用 PostgreSQL 10.3 和 Windows 7/10。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    select * from foo4(4); 应该会给你想要的结果。

    【讨论】:

    • 你是对的。为什么查询在函数内部会产生不同的输出?
    • @Lars 函数总是返回单个值(在大多数语言中)。这使得返回的数据更容易处理。在这种特殊情况下,foo4(int) 返回的数据属于 RECORD 类型。这种类型可以保存一组值,就像 ROW 类型可以保存表格的整行一样。通过执行select * from myRow or myRecord;,您将行或记录分散到列中。试试select * from "table_name"select "table_name" from "table_name"; 你会明白我在说什么。
    • 更多信息在这里:postgresql.org/docs/9.0/static/…
    【解决方案2】:

    试试RETURN QUERY EXECUTE。这将导致查询是动态的而不是静态的。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#AEN63012

    【讨论】:

    • 这与动态与静态 SQL 无关。
    猜你喜欢
    • 2011-02-05
    • 2020-05-15
    • 1970-01-01
    • 2015-10-04
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多