Я столкнулся с этой моделью после долгих исследований, стука головы и скрежета зубов:
CREATE OR REPLACE PACKAGE BODY my_schema.package_name
IS
PROCEDURE foo
IS
BEGIN
-- Call stored procedures/functions that throw unhandled exceptions
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR! - '
|| DBMS_UTILITY.FORMAT_ERROR_STACK
|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END foo;
END;
Кажется, что функция DBMS_UTILITY.FORMAT_ERROR_STACK
выдает код ошибки и сообщение, а DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
, похоже, дает честную трассировку стека добродетели, с номерами строк и именами хранимых процедур в Oracle 10g, по крайней мере.
Я не уверен, что эти функции доступны в Oracle 9i. Я не смог найти много информации о подобных вещах даже для Oracle 10g, поэтому я подумал, что, по крайней мере, опубликую этот ответ, поскольку 9i довольно старый (а значит, и 10g).