Есть ли способ создать локальную переменную таблицы внутри хранимого proc Firebird?

в MS SQL Server можно объявлять локальные переменные любого примитивного типа или табличного типа. Эта таблица является обычной таблицей, которую вы можете запустить SELECT, INSERT, UPDATE и DELETE on, как и любая другая таблица, за исключением того, что это локальная переменная, а не часть самой базы данных.

Я пытаюсь сделать то же самое в Firebird, но ему, похоже, не нравится синтаксис.

declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"

есть ли способ сделать это? (И прежде чем кто-либо скажет: "используйте выбираемый хранимая процедура: "это не сработает. Мне нужно что-то, что я могу динамически запускать INSERT и SELECT on.)

1 ответов


Firebird не поддерживает табличные переменные так же, как SQL Server.

близкая вещь, которую вы имеете в своем распоряжении, это Глобальные Временные Таблицы (требуется Firebird 2.1 или выше)

(v. 2.1) глобальные временные таблицы (GTTs) - это таблицы, которые хранятся в системном каталоге с постоянными метаданными, но с временными данными. Данные из разных соединений (или транзакций, в зависимости от области) изолированы друг от друга, но метаданные GTT являются общими для всех соединений и транзакций.

существует два вида GTT:

с данными, которые сохраняются в течение всего времени соединения, в котором был указан GTT; и

с данными, которые сохраняются только на время жизни ссылок сделки.

вы должны создать GTT заранее.

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]