Переменная таблицы Tsql для Oracle PLSql

Я работаю над преобразованием TSql в Plsql. В tsql объявлено и используется несколько табличных переменных, например

DECLARE @table_var table( id_ int ......)
WHILE ...
begin
insert into @table_var select ...
...
select * from @table_var..

Я думаю, что в оракуле можно использовать глобальную временную таблицу, но данные будут состоять максимум из 10 тыс. строк.

Насколько эффективны глобальные временные таблицы в этом случае? Есть ли другой способ, кроме global temporary table и table types в Oracle, для преобразования аналогичного запроса sql?

Версия Oracle: oracle11g или oracle12c


person Praveen    schedule 29.04.2015    source источник
comment
В Oracle редко действительно нужна временная таблица, и, как вы обнаружили, она поддерживает только глобальные временные таблицы, а не локальные. Реальный вопрос, который нужно задать себе, заключается в том, действительно ли вам вообще нужно хранить данные в своей собственной структуре - нужно ли вам что-либо делать с table_var, кроме как выбрать из него позже, что вы могли бы сделать, выбрав/присоединившись к вашему первоначальному выбору вместо этого ? Вместо этого вы можете использовать типы таблиц на уровне схемы, но они также могут быть излишними. Фрагмент слишком мал и расплывчат, чтобы действительно сказать, что вам нужно.   -  person Alex Poole    schedule 29.04.2015
comment
В коде есть такие же области, где table_var нельзя заменить на select или join. Я не понял schema-level table types instead but they might be overkill too...... table type или temp table для размера данных 10k rows?   -  person Praveen    schedule 30.04.2015
comment
Это зависит от того, почему ее нельзя заменить, что вы делаете с этой переменной, сколько раз вы ее используете, насколько дорог запрос, который ее заполняет, и т. д. Ваш вопрос слишком абстрактен на первый взгляд. момент действительно, за исключением столь же абстрактных ответов *8-)   -  person Alex Poole    schedule 30.04.2015


Ответы (1)


В зависимости от размера данных и задачи, которую вы хотите выполнить, вы можете использовать

  1. Pl/sql запись/таблица и массовая обработка
  2. удерживайте данные в курсоре и перебирайте их
  3. если вы хотите обновить запрос - вы можете использовать встроенное представление (сохранение первичного ключа)
person Sendi_t    schedule 29.04.2015
comment
table type или temp table для размера данных 10 тыс. строк? - person Praveen; 30.04.2015