Когда вы вызываете dbms_output
(я полагаю, метод put_line), вывод перекачивается в stderr, а не в какой-либо файл журнала.
Я бы настоятельно рекомендовал вам использовать такой инструмент, как Log4PLSQL или создать таблицу журналов и иметь автономную транзакцию, которая регистрирует все ошибки в этой таблице.
Ваша основная процедура регистрации ошибок будет выглядеть примерно так:
PROCEDURE log_errors(p_error_details varchar2) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO ERROR_LOG(SR_NO, ERR_MSG, ERR_DATE)
VALUES(ERR_LOG_SEQ.NEXTVAL, p_error_details, sysdate);
COMMIT;
END log_errors;
Поддерживающие сценарии для процедуры регистрации ошибок:
CREATE TABLE ERROR_LOG(SR_NO NUMBER, ERR_MSG VARCHAR2(2000), ERR_DATE DATE);
CREATE SEQUENCE ERR_LOG_SEQ MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;
Теперь просто добавьте обработчик исключений и вызовите эту процедуру в процедуре PL / SQL, чтобы решить проблемы.
BEGIN
....
EXCEPTION
...
WHEN OTHERS THEN
log_errors(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
Все исключения будут обработаны и сохранены в таблице ERROR_LOG
.