Fork me on GitHub

PL/SQL之异常

  异常分为预定义异常和用户自定义异常。预定义异常是由系统定义的异常。由于他们已在STANDARD包中预定义了,因此,这些预定义异常可以直接在程序中使用,而不用在预定义部分声明。而用户自定义异常则需要在定义部分声明后才能在可执行部分使用。用户自定义异常对应的错误不一定是Oracle错误,例如,它可能是一个数据错误。

1、预定义异常

  

  

  

2、异常的声明

用户自定义异常必须先在定义部分声明,然后再使用。

语法:
EXCEPTION exception

EXCEPTION 用来指定声明的是异常
exception 是一个自定义异常名

DECLARE
    e_TooManyAuthors EXCEPTION;
    
异常是一个错误状态,而不是一个数据项,所以异常不能出现在赋值语句或SQL语句中。但异常的作用域与定义部分其他变量的作用域相同。如果一个用户自定义异常被传递到作用域外,则不能再通过原来的名字引用它。为了解决这个问题,我们可以再包中声明异常,这个异常就可以在任何块中使用,使用时在异常前加包名前缀即可。

CREATE OR REPLACE PACKAGE Globals
    /*这个包中声明的对象可在任意块中引用。注意这个包没有包体*/
    e_UserDefinedException EXCEPTION;
    ...
END Globals;

  

3、异常的产生

  

  

  

4、异常处理

异常处理部分包含着对异常的处理语句。当一个异常相应的错误发生到这个异常产生时,异常处理语句被执行。
    
语法:
EXCEPTION 
    WHEN exception_name THEN
        Sequence_of_statements1;
    WHEN exception_name THEN
        Sequence_of_statements2;
    WHEN OTHERS THEN
        Sequence_of_statements3;
END;    

一个异常处理语句可以处理多个异常。只要在WHEN子句中加由OR分隔的多个异常名即可。

如果块中的异常没有被处理,则该块会带着未处理的异常返回调用它的程序,这会导致调用它的程序出错。如果在存储过程中出现异常,则存储过程的OUT参数将得不到返回值。最好在块的最外层使用OTHERS子句处理块中所有未处理的异常。

  

  

  

  

推荐文章:整理oracle异常错误处理

posted @ 2015-08-21 17:32  何海洋  阅读(800)  评论(0编辑  收藏  举报