Narazil jsem na tento vzorec po mnoha výzkumech, bouchání hlavou a skřípání zubů:
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
Zdá se, že funkce poskytuje chybový kód a zprávu a DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
Zdá se, že poskytuje poctivé trasování zásobníku, doplněné čísly řádků a názvy uložených procedur alespoň v Oracle 10g.
Nejsem si jistý, zda jsou tyto funkce dostupné v Oracle 9i. Nemohl jsem najít mnoho informací o tomto druhu ani pro Oracle 10g, tak jsem si řekl, že alespoň zveřejním tuto odpověď, protože 9i je docela starý (a tak je to 10g).