Где посмотреть код ошибки в случае сбоя выполнения процедуры?

Кто-нибудь может подсказать, где в БД Oracle можно посмотреть, какой код ошибки был залогирован при сбое прикладной процедуры?


Ответы (1 шт):

Автор решения: 0xdb

По умолчанию ошибки нигде не логируются. Это задача резработчика процедуры обеспечить запись ошибок и других событий в таблицы или файлы логирования. Не отловленые исключения возвращаются туда, где процедура была вызвана.

В самом простейшем случае, логирование выглядит так:

create table log (id int generated always as identity, text varchar2 (4000), ts timestamp)
/
create or replace procedure logger (text varchar2) is
pragma autonomous_transaction;
begin
    insert into log (text, ts) values (text, systimestamp);
    commit;
end;
/
create or replace procedure proc (par varchar2) is
    val int;
begin
    select 1 into val
    from dual 
    where par='xxx';
exception when others then
    logger (sqlerrm||chr(10)||sys.dbms_utility.format_error_backtrace());
    raise;
end;
/

Запуск и результат:

exec proc ('aaa')

select * from log order by ts desc 
/

        ID TEXT                             TS                           
---------- -------------------------------- -----------------------------
         1 ORA-01403: no data found         2020-09-07 23:16:04,055966000
           ORA-06512: at "ME.PROC", line 4                               
→ Ссылка