Since Oracle 10g, DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
is available to get an exception’s stack trace, i.e. files and lines that lead
up to the exception. When combined with DBMS_UTILITY.FORMAT_ERROR_STACK
, which contains the exception error code and message, developers
are able quickly identify defects.
This rule verifies that whenever either is used in an exception handler, the other is used as well.
Noncompliant code example
BEGIN
RAISE_APPLICATION_ERROR(-20000, 'This is an error example');
EXCEPTION
WHEN OTHERS THEN -- Noncompliant; only FORMAT_ERROR_STACK is used
DBMS_OUTPUT.PUT(DBMS_UTILITY.FORMAT_ERROR_STACK); -- "ORA-20000: This is an error example"
DBMS_OUTPUT.PUT_LINE('');
END;
/
Compliant solution
BEGIN
RAISE_APPLICATION_ERROR(-20000, 'This is an error example');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT(DBMS_UTILITY.FORMAT_ERROR_STACK); -- "ORA-20000: This is an error example"
DBMS_OUTPUT.PUT(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); -- "ORA-06512: at line 2"
DBMS_OUTPUT.PUT_LINE('');
END;
/