PL/SQL之异常

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

1、预定义异常

  PL/SQL之异常

  PL/SQL之异常

  PL/SQL之异常

2、异常的声明

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

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

  PL/SQL之异常

3、异常的产生

  PL/SQL之异常

  PL/SQL之异常

  PL/SQL之异常

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子句处理块中所有未处理的异常。

  PL/SQL之异常

  PL/SQL之异常

  PL/SQL之异常

  PL/SQL之异常

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

上一篇:golang的加法比C快?


下一篇:WinDbg抓取dmp文件