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

Есть ли что-то вроде табличных переменных в T-SQL?
На сервере Sql это выглядит так:

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

Ответы

Ответ 1

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

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

Дополнительную информацию в руководстве о CREATE TABLE можно найти здесь:

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

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

Ответ 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;
   ...