Создайте таблицу внутри oracle работы - PullRequest
0 голосов
/ 31 марта 2020

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

begin
    create table nwn_tmp_3133030 as
    select serial_number, item_code
    from   havy_table
    where id = '8800';
end;

Но когда я запустил JOB, он закончился с ошибкой ниже.

"ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

   ( begin case declare exit for goto if loop mod null pragma
   raise return select update while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   continue close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge pipe purge"

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Одним из способов является использование Dynami c SQL:

begin
EXECUTE IMMEDIATE q'{create table nwn_tmp_3133030 as
select serial_number, item_code
from havy_table
where id = '8800'}';
end;

db <> fiddle demo


РЕДАКТИРОВАТЬ:

Вы также можете рассмотреть возможность использования Личная временная таблица (Oracle 18 c) ;

1 голос
/ 31 марта 2020

Нет необходимости создавать таблицы на лету, как это. Если вы хотите go этот маршрут, просто создайте глобальную временную таблицу (GTT). Это разовая установка.

Но кроме этого, я не вижу, как вы экономите время. Вы жалуетесь на необходимость прочитать всю таблицу, но затем вы делаете именно это, чтобы загрузить данные во временную таблицу. Что ж, вы действительно квалифицируете это с помощью предложения WHERE - что может или не может избежать полного сканирования таблицы, но почему вы не можете применить это непосредственно в вашем реальном коде приложения?

...