Временные таблицы Oracle

Простые таблицы Oracle Database, которые мы описывали ранее, удовлетворяют большинству потребностей приложений в данных, но это не единственный вид таблиц, которые Oracle позволяет создавать. Вдобавок можно создавать несколько видов специализированных таблиц, таких как временные таблицы, внешние таблицы и индекс-таблицы. В данной публикации дадим обзор именно временным таблицам базы данных Oracle.

 

Временные таблицы

Oracle позволяет создавать временные таблицы для хранения данных только на протяжении сеанса или даже одной транзакции. После окончания сеанса или транзакции таблица очищается (все строки автоматически удаляются). Временные таблицы удобны, когда вы имеете дело со сложными запросами или транзакциями, которые требуют хранения временной информации перед записью ее в постоянные таблицы.

Данные во временных таблицах не могут быть резервированы как данные постоянных таблиц. Временным таблицам или индексам до их создания никаких сегментов данных или индексов автоматически не выделяются, как это происходит с постоянными таблицами и индексами. Место для временных таблиц выделяется во временных сегментах только после первого применения команды INSERT с этими таблицами.

Временные таблицы повышают производительность транзакций, включающих сложные запросы. Одним из традиционных альтернатив сложным запросам является использование представлений для упрощения сложных запросов, но представление должно выполняться при каждом обращении к нему, что во многих случаях сводит на нет все преимущества. Временные таблицы — отличное решение для подобных случаев, поскольку они могут быть созданы как результат сложного оператора SELECT, использованного в конкретном сеансе или транзакции, и автоматически очищаются после сеанса.


Важно! Хотя Oracle не анализирует данные временных таблиц на предмет распределения данных, это не представляет проблемы для эффективной обработки запросов, потому что временные таблицы могут хранить постоянно доступные соединения и прочую информацию в одном удобном месте. Вместо многократного выполнения сложных запросов к постоянным таблицам можно многократно обращаться к этим таблицам.


Временные таблицы создаются во временном табличном пространстве пользователя и им выделяются временные сегменты только после первого оператора INSERT, обращенного к временной таблице. После завершения транзакции или окончания сеанса они освобождаются — в зависимости от того, как временная таблица была определена.

Ниже перечислены некоторые привлекательные свойства временных таблиц с точки зрения администратора баз данных Oracle.

  • Временные таблицы существенно сокращают объем действий, связанных с журналами повторного выполнения, которые генерируются транзакциями. Журналы повторного выполнения заполняются не так быстро при использовании временных таблиц во время сложных транзакций.
  • Временные таблицы могут быть проиндексированы для повышения производительности.
  • Сеансы могут обновлять, вставлять и удалять данные во временных таблицах точно так же, как и в постоянных.
  • Данные автоматически удаляются из временной таблицы по окончании сеанса или транзакции.
  • На временных таблицах можно определять ограничения.
  • Разные пользователи могут обращаться к одной и той же временной таблице, причем каждый из них видит данные только своего собственного сеанса.
  • Временные таблицы обеспечивают эффективный доступ к данным, поскольку сложные запросы не приходится выполнять многократно.
  • Минимальный объем блокировок временных таблицы означает более эффективную обработку запросов.
  • Структура таблицы сохраняется после удаления данных, что помогает их использовать в будущем.

 

Создание временной таблицы сеанса

Рассмотрим пример создания временной таблицы Oracle Database на SQL, которая существует на протяжении сеанса; для этого используется опция ON COMMIT DELETE ROWS:

SQL> CREATE GLOBAL TEMPORARY TABLE flight_status(
destination VARCHAR2(30),
startdate DATE,
return_date DATE,
ticket_price NUMBER)
ON COMMIT PRESERVE ROWS; 

Опция ON COMMIT PRESERVE ROWS в предыдущем примере указывает на то, что данные таблицы сохраняются на протяжении сеанса, а не на протяжении транзакции.

 

Создание временной таблицы транзакции

В отличие от временной таблицы сеанса, временные таблицы транзакций специфичны для отдельной транзакции. Как только транзакция фиксируется или откатывается, данные из этой таблицы удаляются. Как создать временную таблицу транзакции на языке SQL рассмотрим на примере:

SQL> CREATE GLOBAL TEMPORARY TABLE sales_info
(customer_name VARCHAR2(30),
transaction_no NUMBER,
transaction_date DATE)
ON COMMIT DELETE ROWS;

Опция ON COMMIT DELETE ROWS ясно указывает на то, что данные в этой таблице должны оставаться только на протяжении транзакции, использующей эту временную таблицу.

Вас заинтересует / Intresting for you:

Oracle Database: обзор базы да...
Oracle Database: обзор базы да... 10396 просмотров Илья Дергунов Sun, 11 Aug 2019, 15:01:35
Oracle изменения изменений!
Oracle изменения изменений! 2268 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Разница между базой данных и э...
Разница между базой данных и э... 2144 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Версии СУБД Oracle Database 10...
Версии СУБД Oracle Database 10... 3542 просмотров Илья Дергунов Sat, 11 Aug 2018, 11:43:08
Войдите чтобы комментировать

apv аватар
apv ответил в теме #8478 04 мая 2017 09:57
Подробная и качественная статья по временным таблицам Oracle. Узнал для себя новое по поводу опции ON COMMIT PRESERVE ROWS. Интересные нюансы про сеанс/сессию и транзакцию, в общем!