您的位置:首页 > 博客中心 > 数据库 >

PL/SQL之异常

时间:2022-03-14 13:46

  异常分为预定义异常和用户自定义异常。预定义异常是由系统定义的异常。由于他们已在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子句处理块中所有未处理的异常。

  技术分享

  技术分享

  技术分享

  技术分享

推荐文章:

本类排行

今日推荐

热门手游