Создание и использование временных таблиц
Временная таблица это таблица определение которой видно всем сессиям, но данные для каждой сессии только те, которые были добавлены этой сессией. Программисты могут использовать их для обработки больших данных. Синтаксис команды
CREATE GLOBAL TEMPORARY TABLE temp_tab_name
(column datatype [,column datatype] )
[ON COMMIT {DELETE | PRESERVE} ROWS] ;
Определение столбцов такое же как и для обычной таблицы и так же может быть получено подзапросом. Дополнительная директива определяет время жизни добавленных в таблицу строк. По умолчанию используется удаление строк по окончании добавивших их транзакции, но можно использовать PRESERVE и данных будут хранится до конца сессии. В любом случае данные во временных таблицах свои для каждой сесии: разные пользователи могут добавлять свои строки в таблицу и они никогда не увидят строк другой сессии.
Временные таблицы во многом схожи с обычными. Вы можете выполнять DML или SELECT команды используя их. Можно создать индексы, ограничеиня и триггеры для этих таблицы. Для них можно создать представления, синонимы и все SQL команды к временным таблицам будут выполняться быстрее чем к обычным таблицам.
Первой причиной такого быстродействия является то что временные таблицы не являются сегментами в табличном пространстве. В идеале они существуют только в PGA сессии которая их использует, т.е. не используется жесткий диск и даже буфер БД. Если PGA не доступно памяти для хранения временной таблицы (к примеру если миллионы строк вставляются в таблицы – такое часто бывает при создании отчётов) то таблица записывается во временное табличное пространтсво. Операции чтения/записи во временном табличном пространстве гораздо быстрее так как не используется буфер БД: все операции производятся соотствующим серверным процессом сразу на диск.
Вторая причина быстродействия – DML команды дял временных таблиц не создают вектором изменений. Так как данные хранятся только во время жизни сессии (или транзакции) нет смысла создавать данные для отмены изменений. Это даёт двойной выигрыш – быстрое выполнение DML операция и снижение нагрузки на систему генерации отмены изменений, что могло бы плохо влиять на производительность в нагруженной системе с большим числом пользователей.
На рисунке 7-2 показано создание временной таблицы используя SQL *Plus. Также можно создать временную таблицу используя Database Control Table Creation Wizrad.