本文共 2881 字,大约阅读时间需要 9 分钟。
Test Code:
DECLAREBEGIN <<test0>>-- most normal way to handle exception. DECLARE except_test0 EXCEPTION; BEGIN RAISE except_test0; EXCEPTION WHEN except_test0 THEN dbms_output.put_line('test0 except_test0: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); WHEN OTHERS THEN dbms_output.put_line('test0 OTHERS: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); END; <<test1>>-- custom exception error number. DECLARE except_test1 EXCEPTION; -- suggested error number range: -20,NNN. PRAGMA EXCEPTION_INIT(except_test1, -20001); BEGIN RAISE except_test1; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('test1: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); END; <<test2>>-- custom exception error number and error message. BEGIN raise_application_error(-20002, 'except test 2'); EXCEPTION WHEN OTHERS THEN IF SQLCODE = -20002 THEN dbms_output.put_line('test2A: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); dbms_output.put_line('test2B: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); ELSE dbms_output.put_line('test2C: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); END IF; END; -- SQLCODE and SQLERRM will be re evaluated after EXCEPTION handled. dbms_output.put_line('test2D: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); <<test3>>-- custom exception error number and error message, more readable. DECLARE except_test3 EXCEPTION; PRAGMA EXCEPTION_INIT(except_test3, -20001); BEGIN raise_application_error(-20001, 'except test 3'); EXCEPTION WHEN except_test3 THEN dbms_output.put_line('test3 except_test3: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); WHEN OTHERS THEN dbms_output.put_line('test3 OTHERS: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); END; <<test4>>-- exception can be re raised. BEGIN RAISE no_data_found; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('test4: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM); RAISE; END;EXCEPTION WHEN OTHERS THEN dbms_output.put_line('outer: SQLCODE=' || SQLCODE || ', SQLERRM=' || SQLERRM);END;
Output:
test0 except_test0: SQLCODE=1, SQLERRM=User-Defined Exceptiontest1: SQLCODE=-20001, SQLERRM=ORA-20001: test2A: SQLCODE=-20002, SQLERRM=ORA-20002: except test 2test2B: SQLCODE=-20002, SQLERRM=ORA-20002: except test 2test2D: SQLCODE=0, SQLERRM=ORA-0000: normal, successful completiontest3 except_test3: SQLCODE=-20001, SQLERRM=ORA-20001: except test 3test4: SQLCODE=100, SQLERRM=ORA-01403: no data foundouter: SQLCODE=100, SQLERRM=ORA-01403: no data found
转载地址:http://cytai.baihongyu.com/