Есть ли способ создать локальную переменную таблицы внутри хранимого 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]