BEGINEXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
WHEN OTHERS THENIF SQLCODE =-955THENNULL;-- suppresses ORA-00955 exceptionELSE
RAISE;ENDIF;END;
Другой вариант - использовать EXCEPTION_INITдирективу Pragma, чтобы связать известный номер ошибки Oracle с пользовательским исключением;
DECLARE
name_in_use exception;--declare a user defined exception
pragma exception_init( name_in_use,-955);--bind the error code to the above BEGINEXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
when name_in_use thennull;--suppress ORA-00955 exceptionEND;
Кстати, есть ли какой-нибудь синтаксис для перехвата ошибок, просто предоставляя коды ошибок?
я не могу пойти просто без того, когда другие поднимают линии?
bernd_k
@bernd_k да, вы делаете это, однако это
необратимое
2
Пожалуйста, добавьте рейз в свои КОГДА ДРУГИЕ, когда sqlcodeНЕ 955 =)
Винсент Малграт
ОП может по-прежнему хотеть, чтобы возникли другие ошибки. Ваш Исключительный блок "как есть" ведет себя точно так же, КОГДА ДРУГОЙ, ЧЕМ НУЛЬ. Я думаю, что ОП хочет что-то более точное и тонкое.
Винсент Малграт
@VincentMalgrat Вы правы.
Сатьяджит Бхат
5
Подобно тому, что Сатья уже предлагал, но я хотел бы when othersполностью избежать, если это возможно - необработанное исключение обычно является правильным результатом для исключений, которые вы специально не обрабатываете:
sqlcode
НЕ 955 =)Подобно тому, что Сатья уже предлагал, но я хотел бы
when others
полностью избежать, если это возможно - необработанное исключение обычно является правильным результатом для исключений, которые вы специально не обрабатываете:источник