Natknąłem się na ten wzór po wielu badaniach, uderzaniu głową i zgrzytaniu zębami:
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
funkcja wydaje się podawać kod błędu i komunikat, a DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
wydaje się dawać uczciwy i dobry ślad stosu, wraz z numerami wierszy i nazwami procedur składowanych przynajmniej w Oracle 10g.
Nie jestem pewien, czy te funkcje są dostępne w Oracle 9i. Nie mogłem znaleźć wielu informacji na ten temat, nawet dla Oracle 10g, więc pomyślałem, że przynajmniej opublikuję tę odpowiedź, ponieważ 9i jest dość stary (a więc jest to 10g).