Переменная таблицы PostgreSQL

есть ли что-то вроде табличных переменных в 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

2 ответов


As @Clodoaldo прокомментировал используйте временная таблица в PostgreSQL. Для вашего примера:

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

дополнительная информация в руководстве о CREATE TABLE где вы можете найти эту цитату:

если указано, таблица создается как временная таблица. Временный таблицы автоматически удаляются в конце сеанса, или необязательно в конце текущей транзакции (см. раздел фиксация ниже.) Существующий постоянный таблицы с одинаковым именем не отображаются к текущему сеансу, пока существует временная таблица, если они ссылаются на имена, определенные схемой. Любые индексы, созданные на временные таблицы также автоматически являются временными.

Нелогируемые таблицы являются несколько связанной особенностью PostgreSQL 9.1. Они сохраняют записи на диск не пишу WAL. Вот это обсуждение особенностей Робертом Хаас!--5-->.

сторону, в отношении money тип данных:


вы можете использовать массив составного типа вместо

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;
   ...