#oracle #plsql
#Oracle #plsql
Вопрос:
Как написать обработчик исключений для вызова raise_application_error? Я полностью застрял на этом. Я знаю, как вызвать и перехватить пользовательское исключение, но я не знаю, как перехватить ошибку с помощью raise_application_error с другим блоком catch, а затем «когда другие». Спасибо за подсказку
Ответ №1:
Что-то вроде этого?
declare
no_bananas_on_tuesday exception;
pragma exception_init(no_bananas_on_tuesday, -20123);
begin
raise_application_error(-20123, 'Bananas are not available on a Tuesday');
exception
when no_bananas_on_tuesday then
dbms_output.put_line('It''s Tuesday but user requested a banana.');
end;
- Приведенный выше вызов генерирует ошибку ORA-20123.
- Мы определяем пользовательское исключение
no_bananas_on_tuesday
, связанное с кодом -20123. - Когда возникает исключение ORA-20123, мы можем перехватить его с
no_bananas_on_tuesday
помощью обработчика исключений.
Ответ №2:
Вы можете проверить sqlcode внутри своего «когда другие»
например:
create or replace function square( n number) return number is
begin
if n <= 10 then
return n*n;
else
raise_application_error(-20001, 'too big');
end if;
end;
declare
myNumber number(10);
begin
myNumber := square(300);
dbms_output.put_line(myNumber);
exception
when others then
if sqlcode=-20001 then
dbms_output.put_line('beyond the limit '||sqlerrm);
else
dbms_output.put_line(sqlerrm);
end if;
end;