Где посмотреть код ошибки в случае сбоя выполнения процедуры?
Кто-нибудь может подсказать, где в БД 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