PL/SQL编程入门之二

来源:互联网 发布:装修淘宝店铺怎么装修 编辑:程序博客网 时间:2024/06/14 10:36

PL/SQL的异常处理

根据Exception来进行异常处理

PL/SQLbeginend之间发生的异常通过在这个块中定义的exception来处理。同一块中没有异常处理定义的情况下,则引用上层的意外处理。

例如虽然捕捉了异常,但是在异常处理部分什么也没写的情况下什么也不会发生。但是如果不进行异常再调用,块内的异常处理被判断为执行,则不通知上层的块。

      

 

BEGIN

   <程序段>

EXCEPTION

 WHEN <异常名> THEN

   <异常处理>

END;

 

带有异常处理的PL/SQL块定义

在异常处理中,如果有多个when,可以分开处理。

如果想同时处理多个异常,则用 when 异常名 or 异常名 or 。。。

例:发生的所有异常都是什么都不处理然后结束(不显示消息)。

      

DECLARE

       vNum     NUMBER(2);

BEGIN

       vNum := 1 / 0;

       DBMS_OUTPUT.PUT_LINE('数値=' || vNum);

EXCEPTION

       WHEN OTHERS THEN

              NULL; -- NULL;  --什么都不处理

END;

/

 

Others异常是特殊的异常名,包括所有的异常。但是others不能和其他的异常一起进行处理。

 

多个例外处理的写法以及调用上层异常处理的方法

在发生除零例外的时候显示错误信息。在发生除零异常的时候,发生异常的本身不能向上层抛出。除零异常以外的所有异常发生的时候在异常处理的部分使用RAISE来向上层抛出这个异常。

      

DECLARE

       vNum     NUMBER(2);

BEGIN

       -- ZERO DIVIDE EXCEPTION

       vNum := 1 / 0;

       DBMS_OUTPUT.PUT_LINE('数値=' || vNum);

EXCEPTION

       WHEN ZERO_DIVIDE THEN

              DBMS_OUTPUT.PUT_LINE('不能进行计算');

       WHEN OTHERS THEN

       --     < 异常処理 >

              RAISE;

END;

/

 

Others异常是包括所有异常的异常名,必须要写在异常处理的最后,否则会出现变异错误(因为会把后面的异常处理器给覆盖)。

 

嵌套块的异常处理

      

DECLARE

       vNum     NUMBER(2);

BEGIN

       BEGIN

              -- ZERO DIVIDE EXCEPTION

              vNum := 1 / 0;

       EXCEPTION

              WHEN ZERO_DIVIDE THEN

                     NULL;

       END;

EXCEPTION

       WHEN OTHERS THEN

              < 异常処理 >

              RAISE;

END;

/

 

原创粉丝点击