Глобальные временные таблицы (GTT)
Глобальные временные таблицы (в дальнейшем сокращённо “GTT”) так же, как и обычные таблицы, являются постоянными метаданными, но данные в них ограничены по времени существования транзакцией (значение по умолчанию) или соединением с БД.Каждая транзакция или соединение имеет свой собственный экземпляр GTT с данными, изолированный от всех остальных.Экземпляры создаются только при условии обращения к GTT, и данные в ней удаляются при завершении транзакции или отключении от БД.Метаданные GTT могут быть изменены или удалены с помощью инструкций ALTER TABLE
и DROP TABLE
.
CREATE GLOBAL TEMPORARY TABLE name (<column_def> [, {<column_def> | <table_constraint>} ...]) [ON COMMIT {DELETE | PRESERVE} ROWS] [SQL SECURITY {DEFINER | INVOKER}]
Если в операторе создания глобальной временной таблицы указано необязательное предложение ON COMMIT DELETE ROWS
, то будет создана GTT транзакционного уровня (по умолчанию). При указании предложения ON COMMIT PRESERVE ROWS
— будет создана GTT уровня соединения с базой данных.
Предложение EXTERNAL [FILE]
нельзя использовать для глобальной временной таблицы.
Note
|
Операторы |
Ограничения GTT
GTT обладают всеми атрибутами обычных таблиц (ключи, внешние ключи, индексы и триггеры), но имеют ряд ограничений:
-
GTT и обычные таблицы не могут ссылаться друг на друга;
-
GTT уровня соединения (“PRESERVE ROWS”) GTT не могут ссылаться на GTT транзакционного уровня (“DELETE ROWS”);
-
Ограничения домена не могут ссылаться на любую GTT;
-
Уничтожения экземпляра GTT в конце своего жизненного цикла не вызывает срабатывания триггеров до/после удаления.
Tip
|
В существующей базе данных не всегда легко отличить обычную таблицу от GTT, или GTT транзакционного уровня от GTT уровня соединения.Используйте следующий запрос для определения типа таблицы:
Для просмотра информации о типах всех таблиц используйте запрос:
Поле RDB$TYPE_NAME будет отображать PERSISTENT для обычной таблицы, VIEW для представления, GLOBAL_TEMPORARY_PRESERVE для GTT уровня соединения, и GLOBAL_TEMPORARY_DELETE для GTT уровня транзакции. |