PostgreSQL的表变量(PostgreSQL table variable)

2019-06-24 21:21发布

有没有像在T-SQL表变量什么?
在SQL Server中,它看起来是这样的:

DECLARE @ProductTotals TABLE
(
  ProductID int,
  Revenue money
)

然后,在程序我可以:

INSERT INTO @ProductTotals (ProductID, Revenue)
  SELECT ProductID, SUM(UnitPrice * Quantity)
  FROM [Order Details]
  GROUP BY ProductID

而随着像一个普通的表这个变量操纵。

下面是说明: http://odetocode.com/Articles/365.aspx

Answer 1:

作为@Clodoaldo评论 :PostgreSQL中使用临时表 。 为了您的例子:

CREATE TEMP TABLE product_totals (
   product_id int
 , revenue money
);

在手动有关更多信息CREATE TABLE在这里你可以找到这句话:

如果指定,则该表作为临时表创建。 临时表在一个会话结束时自动删除,或任选地在当前事务结束时(见下面的ON COMMIT)。 而临时表存在具有相同名称的现有永久表不是当前会话中显示,除非它们是用模式修饰的名字引用。 在临时表上创建的索引都是自动临时的为好。

未记录的表是PostgreSQL 9.1的有些相关的功能。 他们通过不写,以节省磁盘写入WAL 。 这里是一个由罗伯特·哈斯的功能的讨论 。

除此之外,关于money的数据类型:

  • PostgreSQL的:应使用的数据类型为货币?


Answer 2:

你可以在你的复合类型的数组,而不是

CREATE TABLE xx(a int, b int);

CREATE OR REPLACE FUNCTION bubu()
RETURNS void AS $$
DECLARE _x xx[];
BEGIN
   _x := ARRAY(SELECT xx FROM xx);
   RAISE NOTICE '_x=%', _x;
   ...


文章来源: PostgreSQL table variable