CREATE OR REPLACE PROCEDURE proc1
IS
BEGIN
DBMS_OUTPUT.put_line ('running proc1');
RAISE NO_DATA_FOUND;
END;
Procedure created.
CREATE OR REPLACE PROCEDURE proc2
IS
l_str VARCHAR2 (30) := 'calling proc1';
BEGIN
DBMS_OUTPUT.put_line (l_str);
proc1;
END;
Procedure created.
CREATE OR REPLACE PROCEDURE proc3
IS
BEGIN
DBMS_OUTPUT.put_line ('calling proc2');
proc2;
END;
Procedure created.
Without Back Trace....
BEGIN
DBMS_OUTPUT.put_line ('Proc3 -> Proc2 -> Proc1 unhandled');
proc3;
END;
ORA-01403: no data found ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 6 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC3", line 5 ORA-06512: at line 3 ORA-06512: at "SYS.DBMS_SQL", line 1721More Details: https://docs.oracle.com/error-help/db/ora-00100
Trap and Display Error Stack (Error Message)
BEGIN
DBMS_OUTPUT.put_line ('Proc3 -> Proc2 -> Proc1 unhandled');
proc3;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
END;
Proc3 -> Proc2 -> Proc1 unhandled
calling proc2
calling proc1
running proc1
Proc3 -> Proc2 -> Proc1 unhandled
calling proc2
calling proc1
running proc1
ORA-01403: no data found ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 6 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC3", line 5
Add Back Trace to Error Handler
CREATE OR REPLACE PROCEDURE proc3
IS
BEGIN
DBMS_OUTPUT.put_line ('calling proc2');
proc2;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error backtrace at top level:');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
END;
Procedure created.
BEGIN
DBMS_OUTPUT.put_line ('Proc3 -> Proc2 -> Proc1 backtrace');
proc3;
END;
Proc3 -> Proc2 -> Proc1 backtrace
calling proc2
calling proc1
running proc1
Error backtrace at top level:
ORA-01403: no data found ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 6
ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 6 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC3", line 5
Re-Raise Exception
CREATE OR REPLACE PROCEDURE proc1
IS
BEGIN
DBMS_OUTPUT.put_line ('running proc1');
RAISE NO_DATA_FOUND;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error backtrace in block where raised:');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
RAISE;
END;
Procedure created.
Can't Trace All the Way Back
CREATE OR REPLACE PROCEDURE proc3
IS
BEGIN
DBMS_OUTPUT.put_line ('calling proc2');
proc2;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error backtrace at top level:');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
END;
Procedure created.
BEGIN
DBMS_OUTPUT.put_line ('Proc3 -> Proc2 -> Proc1, re-reraise in Proc1');
proc3;
END;
Proc3 -> Proc2 -> Proc1, re-reraise in Proc1
calling proc2
calling proc1
running proc1
Error backtrace in block where raised:
ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5
Error backtrace at top level:
ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 11 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 6 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC3", line 5
Handle and Raise At Every Level
CREATE OR REPLACE PROCEDURE proc1
IS
BEGIN
DBMS_OUTPUT.put_line ('running proc1');
RAISE NO_DATA_FOUND;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error stack in block where raised:');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
RAISE;
END;
Procedure created.
CREATE OR REPLACE PROCEDURE proc2
IS
BEGIN
DBMS_OUTPUT.put_line ('calling proc1');
proc1;
EXCEPTION
WHEN OTHERS
THEN
RAISE VALUE_ERROR;
END;
Procedure created.
CREATE OR REPLACE PROCEDURE proc3
IS
BEGIN
DBMS_OUTPUT.put_line ('calling proc2');
proc2;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error backtrace at top level:');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
END;
Procedure created.
BEGIN
DBMS_OUTPUT.put_line
('Proc3 -> Proc2 -> Proc1, re-reraise in Proc1, raise VE in Proc2');
proc3;
END;
Proc3 -> Proc2 -> Proc1, re-reraise in Proc1, raise VE in Proc2
calling proc2
calling proc1
running proc1
Error stack in block where raised:
ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5
Error backtrace at top level:
ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 9 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 11 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC1", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC2", line 5 ORA-06512: at "SQL_DKDUUASCAEZWMZONLLTKLQUSR.PROC3", line 5