Как воссоздать исключение pl/sql в блоке обработки исключений?

У меня есть следующая процедура, которая используется некоторыми приложениями:

procedure p1
is
begin
  bla bla bla;  
end;

Но блок обработки исключений отсутствует. Таким образом, приложения были написаны в соответствии с этой функцией.

Теперь мне нужно записывать ошибки в p1. Но это не должно влиять на приложения, которые используют эту процедуру.

Что-то вроде этого:

procedure p1
is
begin
  bla bla bla;

  exception when others then
    log_error(sqlcode, sqlerrm);
    raise_new_exception (sqlcode, sqlerrm);
end;

В случае raise_application_error первый параметр должен находиться в диапазоне [-20000, -20999]. Поэтому, если возникает исключение no_data_found, он не может поднять эту ошибку.

В случае exception_init второй параметр не должен быть переменным. Это должен быть числовой литерал.

PS: Как временное решение, я использую выполнить немедленный

Ответ 1

Если ваша ошибка остается прежней, измените ее на

...
exception when others then
  log_error(sqlcode, sqlerrm);
  raise;
end;
/

Это объясняется в документации.