返回带有列的表[重复]

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 无关。

以上是关于返回带有列的表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 返回 xml 列的 xml 子节点

从 MySQL 中具有不同列的表的多个连接结果中删除重复项

如何为表中的两列返回相同的值

测试数据库中重复键的最佳方法

插入具有重复记录列的表中(有问题的屏幕)

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