Переменная таблицы 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 Лучший

Вопрос:

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

Оцените статью
Добавить комментарий