oracle как поймать ошибку приложения raise

#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;
 
  1. Приведенный выше вызов генерирует ошибку ORA-20123.
  2. Мы определяем пользовательское исключение no_bananas_on_tuesday , связанное с кодом -20123.
  3. Когда возникает исключение 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;