返回带有列的表[重复]
Posted
技术标签:
【中文标题】返回带有列的表[重复]【英文标题】: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。
【问题讨论】:
【参考方案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 无关。以上是关于返回带有列的表[重复]的主要内容,如果未能解决你的问题,请参考以下文章