SQLCODE Outside of Exception Section Always 0
BEGIN
DBMS_OUTPUT.put_line (SQLCODE);
END;
0
SQLCODE Invoked via Nested Subprogram from Exception Section
DECLARE
PROCEDURE my_proc
IS
BEGIN
DBMS_OUTPUT.put_line (
'Nested subprogram called from exception section SQLCODE='
|| SQLCODE);
END;
BEGIN
RAISE NO_DATA_FOUND;
EXCEPTION
WHEN OTHERS
THEN
my_proc;
END;
Nested subprogram called from exception section SQLCODE=100
Watch the Changing SQLCODE Value
DECLARE
aname VARCHAR2 (5);
BEGIN
BEGIN
aname := 'Big String';
DBMS_OUTPUT.put_line (aname);
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.put_line (
'Inner block exception section SQLCODE='||SQLCODE);
END;
DBMS_OUTPUT.put_line ('In executable section SQLCODE='||SQLCODE);
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.put_line (
'Outer block exception section SQLCODE='||SQLCODE);
END;
Inner block exception section SQLCODE=-6502
In executable section SQLCODE=0
ALTER SESSION SET plsql_warnings = 'enable:all'
Statement processed.
CREATE OR REPLACE PROCEDURE swallow_error AUTHID DEFINER
IS
aname VARCHAR2 (5);
BEGIN
BEGIN
aname := 'Big';
DBMS_OUTPUT.put_line (aname);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
'Inner block exception section SQLCODE='||SQLCODE);
END;
DBMS_OUTPUT.put_line ('In executable section SQLCODE='||SQLCODE);
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.put_line (
'Outer block exception section SQLCODE='||SQLCODE);
END;
Procedure created.
SELECT text FROM USER_ERRORS
WHERE name = 'SWALLOW_ERROR'
TEXT | PLW-06009: procedure "SWALLOW_ERROR" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR |
---|