Вопрос:
Есть ли что-то вроде табличных переменных в 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
Лучший ответ:
Как прокомментировал @Clodoaldo: используйте временную таблицу в PostgreSQL. Для вашего примера:
CREATE TEMP TABLE product_totals ( product_id int, revenue money );
Дополнительную информацию в руководстве о CREATE TABLE можно найти здесь:
Если указано, таблица создается как временная таблица. временный таблицы автоматически отбрасываются в конце сеанса или необязательно в конце текущей транзакции (см. ВКЛ. КОМИТЕТ ниже). Существующие постоянные таблицы с тем же именем не видны к текущему сеансу, пока существует временная таблица, если только они ссылаются на имена, обозначенные схемой. Любые индексы, созданные на временная таблица также является временной.
Незарегистрированные таблицы – это несколько связанная функция PostgreSQL 9.1. Они сохраняют записи на диске, не записывая WAL. Вот обсуждение функций Роберта Хааса.
Ответ №1
Вместо этого вы можете создать массив составного типа
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; …