Инструменты пользователя

Инструменты сайта


Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

create_global_temporary_table



CREATE GLOBAL TEMPORARY TABLE

Версии сервера

0.9 1.0 1.5.3 1.5.4 1.5.5 2.0 2.0.3 2.0.4 2.1 2.5 3.0
- - - - - - - - + + +

Доступно в

Формат

Global Temporary Tables (GTTs)

Global temporary tables have persistent metadata, but their contents are transaction-bound (the default) or connection-bound. Every transaction or connection has its own private instance of a GTT, isolated from all the others. Instances are only created if and when the GTT is referenced, and destroyed upon transaction end or disconnection. To modify or remove a GTT's metadata, ALTER TABLE and DROP TABLE can be used.

CREATE GLOBAL TEMPORARY TABLE name
   (column_def [, column_def | table_constraint ...])
   [ON COMMIT {DELETE | PRESERVE} ROWS]

Описание

/*пока запощу оригинал - но это времмено, скоро постараюсь перевести на русский язык*/

ON COMMIT DELETE ROWS

создает временную таблицу в которой записи хранятся до следующего COMMIT'a. (После COMMIT'а табличка становится чистой)

ON COMMIT PRESERVE ROWS

создает временную таблицу в которой записи хранятся до потери соединения. (После RECONNECT'a табличка становится чистой)

An EXTERNAL [FILE]

clause is not allowed on a global temporary table.

Restrictions: GTTs can be “dressed up” with all the features and paraphernalia of ordinary tables (keys, references, indices, triggers…) but there are a few restrictions:

GTTs and regular tables cannot reference one another.

A connection-bound (“PRESERVE ROWS”) GTT cannot reference a transaction-bound (“DELETE ROWS”) GTT.

Domain constraints cannot reference any GTT.

The destruction of a GTT instance at the end of its life cycle does not cause any before/after delete triggers to fire.

Пример

CREATE global TEMPORARY TABLE MyConnGTT (
  id INT NOT NULL PRIMARY KEY,
  txt VARCHAR(32),
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
ON commit preserve ROWS;
 
commit;
 
CREATE global TEMPORARY TABLE MyTxGTT (
  id INT NOT NULL PRIMARY KEY,
  parent_id INT NOT NULL REFERENCES MyConnGTT(id),
  txt VARCHAR(32),
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
commit;

Замечание

В существующей базе данных не всегда легко отличить обычную табличку от GTT, или «GTT со временем жизни транзакция» от «GTT со временем жизни коннект», что бы найти отличия в таблиц, используйте этот запрос:

SELECT t.rdb$type_name
  FROM rdb$relations r
  JOIN rdb$types t ON r.rdb$relation_type = t.rdb$type
  WHERE t.rdb$field_name = 'RDB$RELATION_TYPE'
  AND r.rdb$relation_name = 'TABLENAME'

Или, для просмотра всех Ваших зависимостей:

SELECT r.rdb$relation_name, t.rdb$type_name
  FROM rdb$relations r
  JOIN rdb$types t ON r.rdb$relation_type = t.rdb$type
  WHERE t.rdb$field_name = 'RDB$RELATION_TYPE'
  AND COALESCE (r.rdb$system_flag, 0) = 0

См. также

Источник

Только авторизованные участники могут оставлять комментарии.
create_global_temporary_table.txt · Последние изменения: 2015/01/16 20:15 (внешнее изменение)