oracle обрабатывает пользовательское исключение в цикле - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть таблица поиска, которая содержит владельца (схему) и имена таблиц. Поэтому я хочу через эту справочную таблицу l oop вставить данные в новую таблицу из этого owner.table. Но я хочу обработать исключение в l oop на тот случай, если владелец / таблица не существует.

Но я получаю это сообщение об ошибке при компиляции следующего кода. Ошибка (49,21): PLS-00103: Обнаружен символ «ИСКЛЮЧЕНИЕ» при ожидании одного из следующих действий: (начинайте регистр, объявляйте завершение выхода для goto, если l oop mod null pragma повышение возвращают select update, в то время как с << продолжить закрывать текущий выбор извлечения блокировка вставка открытый набор точек сохранения отката sql выполнить фиксацию для очистки канала слияния json_exists json_value json_query json_object json_array </p>

declare
table_does_not_exist exception;  
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);

cursor lookup_table is
select owner,table_name
from lookup;

begin
for rec in lookup_table loop
  execute immediate 'insert into new_table select * from '||rec.owner||'.'||rec.table_name;

  exception
  when table_does_not_exist then
      dbms_output.put_line('table dose not exist, continue the interation');
      continue;
end loop;

1 Ответ

2 голосов
/ 28 апреля 2020
Блочная структура

Oracle допускает вложение блоков. Таким образом, внутри вашего l oop вы можете вложить блок, который обрабатывает ваше исключение.

declare
table_does_not_exist exception;  
PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);

cursor lookup_table is
select owner,table_name
from lookup;

begin
for rec in lookup_table loop 
    begin 
       execute immediate 'insert into new_table select * from '||rec.owner||'.'||rec.table_name;

    exception
        when table_does_not_exist then
          dbms_output.put_line('table dose not exist, continue the interation');
    end ; 
end loop;  
end ;
...