Временные пользовательские таблицы в прямом SQL | ![]() |
![]() |
![]() |
Считается, что время жизни временных таблиц ограничено сессией пользователя. Поэтому прикладной алгоритм, желающий воспользоваться временными таблицами, должен создавать их каждый раз при повторном запуске
. При этом удалять временные таблицы не нужно, они умрут сами после выхода из системы. Однако никто не мешает это сделать явно. Например, для какого-то циклического алгоритма. Могут не работать некоторые особенности , типа автонумерации NRec'ов, хитрые нулевые
индексы и т.д.
Некоторые индексы приводят к созданию зеркальных полей в
таблицах. Эти поля создаются только в случае наличия этих индексов.
Например, поля по upcase /noupcase строкам. Создание таких индексов динамически
в настоящий момент невозможно, если такие поля в таблице
отсутствуют (т.е. не было других индексов, содержащих в качестве
сегмента это поле).
Для Oracle временные таблицы создаются в схеме пользователя, в отличии от основных таблиц БД. Однако особенностью временных таблиц Оракла является то, что нельзя создавать индексы во временных таблицах, если в них есть данные.
Поэтому, чтобы обеспечить возможность создания индексов динамически, нужно указать режим ctmDynamicIndex. При этом будет создаваться не временная таблица Оракла, а обычная, но опять же, в схеме пользователя. Это создаст у пользователя видимость индивидуальной работы и позволит создать индекс динамически.
Есть предположение (не проверенное на практике), что
временные таблицы Оракла должны работать быстрее обычных (иначе к
чему им лишние ограничения).
В Оракле временные таблицы живут вечно, но эмулирует это и сам удаляет временные
таблицы. Но неправильно написанные алгоритмы могут попадать на уже
созданные и не убитые временные таблицы.
Начиная с Атлантис 5.3.08