Oracle
SQL

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

Опубликовано: 20 окт 05
Рейтинг:

Автор: Sergey Balter
Прислал:

Временные таблицы в Оракл не создаются/удаляются "на лету". Вместо этого они создаются при дизайне базы данных и остаются в схеме, наряду с постоянными.

Каждый сеанс (сессия) "видит" во временной таблице только "свои" данные и не видит "чужих" данных. Строки, помещенные во временную таблицу, автоматически удаляются при завершении сеанса. Можно также создать такую временную таблицу, которая будет автоматически очищаться при завершении транзакции. Временная таблица НЕ МОЖЕТ иметь внешних ключей.

Создание транзакционной (transaction-specific) временной таблицы

SQL> create global temporary table TEST(ID NUMBER not null) on commit delete rows;
Таблица создана.

SQL> alter table TEST add constraint TEST_PK_ID primary key (ID);
Таблица изменена.

SQL> alter table TEST add constraint TEST_CH_ID check (id > 0);
Таблица изменена.

SQL> insert into test(id) values(1);
1 строка создана.

SQL> insert into test(id) values(2);
1 строка создана.

SQL> select * from test;
       ID
----------
        1
        2

SQL> commit;
Фиксация обновлений завершена.

SQL> select * from test;
строки не выбраны

Пример создания сессионной (session-specific) временной таблицы
SQL> create global temporary table TEST(ID NUMBER not null) on commit preserve rows;
Таблица создана.

SQL> alter table TEST add constraint TEST_PK_ID primary key (ID);
Таблица изменена.

SQL> alter table TEST add constraint TEST_CH_ID check (id > 0);
Таблица изменена.

SQL> insert into test(id) values(3);
1 строка создана.

SQL> insert into test(id) values(4);
1 строка создана.

SQL> select * from test;

       ID
----------
        3
        4

SQL> commit;
Фиксация обновлений завершена.

SQL> select * from test;
       ID
----------
        3
        4 

Комментарии


  • Можно ли использовать временные таблицы для ускорения процесса загрузки большого объёма данных в Oracle? Будет ли прирост скорости по сравнению с вставкой в постоянные таблицы? Как из временной таблицы после вставки или по завершению сеанса сохранить данные в постоянной?

    Спрашиваю потому, что на сайте IBM видел статью как повысить производительность загрузки большого объёма данных в DB2 при помощи временных таблиц. Работает ли этот рецепт в Oracle?

  • Добавлю: на временную таблицу можно собрать статистику и использовать ее, но она по сути бесполезна - СВО использует только последнюю собранную статистику (от последней параллельно-работающей сессии). Хинты/перестройка запросов рулят.

  • "кратко и по делу"

  • 23 апреля 2010, 17:58 Петросъян

    мелкий почерк, плохо видно

  • Мало, но полезно

  • Спасибо, кратко и по делу

  • Хорошая статья. Полезная.

  • Спасибо, просто и понятно



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Oracle / SQL / Временные таблицы