Обработка исключений оракула создания таблицы - PullRequest
0 голосов
/ 09 ноября 2018

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

IF testes=0 then                                                                                
stmt:= 'create table ' || prefix || SII_BCK_TAB_ID_SEQ.nextval || ' AS SELECT * FROM '|| n_tab || ' WHERE 1=0';
EXECUTE IMMEDIATE stmt;

Могу ли я создать исключение после выполнения оператора? Каков наилучший процесс для обработки ошибок при создании таблицы? или это то же самое, что обработка операторов dml?

Могу ли я вставить что-то вроде точек сохранения? спасибо

1 Ответ

0 голосов
/ 09 ноября 2018

Если бы я был вами, я бы создал отдельную процедуру для обработки таблицы, а затем имел бы исключение. Это делает его модульным кодом; простой в модульном тестировании и т. д.

Например: процедура будет выглядеть примерно так:

PROCEDURE create_table (in_new_table_name in varchar2,
                        in_old_table_name in varchar2)
is
  E_TAB_EXISTS EXCEPTION;
  PRAGMA EXCEPTION_INIT(E_TAB_EXISTS,-955);
BEGIN
  execute immediate 'create table ' || in_new_table_name || ' AS SELECT * FROM '|| in_old_table_name || ' WHERE 1=0';
EXCEPTION
  WHEN E_TAB_EXISTS THEN
    NULL;
END create_table;

и вы бы назвали это как:

If testes = 0 then
  create_table(in_new_table_name => prefix || sii_bck_tab_id_seq.nextval,
               in_old_table_name => n_tab);
  ...
end if;

В идеале вы создаете свой код в пакете и можете просто использовать новую процедуру как отдельную процедуру в пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...