27

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

4

2 回答 2

36

在 PostgreSQL 中使用临时表。对于您的示例:

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

手册关于CREATE TABLE

如果指定,则将该表创建为临时表。临时表在会话结束时自动删除,或者在当前事务结束时自动删除(见ON COMMIT 下文)。默认值search_path首先包括临时模式,因此当临时表存在时,不会为新计划选择同名的现有永久表,除非它们被模式限定名称引用。在临时表上创建的任何索引也自动是临时的。

Postgres 9.1 或更高版本中的未记录表是一个有点相关的特性。他们通过不写入WAL来保存磁盘写入。以下是Robert Haas 对这些功能的讨论:

另外,关于money数据类型:

于 2012-05-28T20:22:35.777 回答
6

您可以改为使用复合类型的数组

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;
   ...
于 2012-06-09T07:19:08.220 回答