1.PLSQL异常处理的几个原则
-
异常是指程序在编译时不能被发现,而在运行时出现的错误,异常处理可以使程序正常结束 ,并且可以灵活指定异常处理动作。
-
异常的作用域是本异常所覆盖的语句块或部分语句块,对于嵌套的语句块,外部定义的异常适用于处理所有内部块中所匹配出现的异常;
-
异常出现后,在块中直接跳到异常处理部分,出现异常问题的后面非异常处理语句不会获得执行;
-
嵌套块中,内部块已处理过异常后,不会再传递进入外部块中处理,在内部块执行完成跳出内部块后,内部块外面外部块的语句仍按顺序执行,不会直接跳到外部块异常页结束块;
-
嵌套块中,内部块未进行异常处理时,会将异常往外层块传递,如果外层块中可以捕获到对应异常,则由外部块处理异常。
2. 栗子
2.1 单个存储过程
创建类似测试过程:
CREATE OR REPLACE PROCEDURE TEST_INNER_EXCEPTION
(O_CODE OUT NUMBER,
O_NOTE OUT VARCHAR2
)
IS
V_RESULT NUMBER;
BEGIN
O_CODE := 1;
O_NOTE :='SUCCESS';
SELECT 1/0 INTO V_RESULT FROM DUAL;
DBMS_OUTPUT.PUT_LINE('异常后是否执行');
EXCEPTION
WHEN OTHERS THEN
O_CODE :=-1;
O_NOTE :='Failure: '||SQLERRM;
END ;
数据库单步测试该过程,将会看到执行到1/0时会发生除零运行时异常,触发ORACLE内置OTHERS异常后,直接跳到EXCEPTION ,执行此异常后的语句,而不会执行发生异常后正常块语句:DMBS_OUTPUT.PUT_LINE打印语句: