你的位置:首页 > 数据库

[数据库]PL/SQL编程_异常处理


用户编写的PL/SQL块在执行过程中不可避免地要发生一些错误。

这里涉及的错误并不是由于程序的语法错误引起的,而是因为处理的数据超出了处理的范围而引发的错误。
如果给这样的错误起一个名字,这就是异常
当PL/SQL块在执行过程中检测到一个错误时,就会抛出相应的异常。
在块中应当处理这样的异常,否则会引起应用程序运行停止。

异常处理程序

异常一般是在PL/SQL程序执行错误时由数据库服务器抛出,也可以在PL/SQL块中由程序员在一定的条件下显式抛出。
无论是哪种形式的异常,都可以在PL/SQL块的异常处理部分编写一段程序进行处理,如果不做任何处理,异常将被传递到调用者,由调用者统一处理。

下面表示两种不同异常的处理方式:

方式一(异常处理):

DECLARE

  定义异常

BEGIN

  抛出异常

EXCEPTION

  捕获并处理异常

END;

方式二(异常传递):

DECLARE

  定义异常

BEGIN

  抛出异常

EXCEPTION

  不处理异常

END;

异常被传递到调用者

如果要在PL/SQL块中对异常进行处理,就需要在异常处理部分编写处理程序。

异常处理程序的形式如下:

EXCEPTION

  WHEN 异常1 OR 异常2 THEN

    异常处理程序1;

  WHEN 异常3 OR 异常4 THEN

    异常处理程序2;

  WHEN OTHERS THEN

    异常处理程序n;

END;

异常处理程序以关键字EXCEPTION开始,结束于关键字END 。

在这部分可以对多个异常分别进行不同的处理,也可以进行相同的处理。
如果没有列出所有异常,可以用关键字OTHERS代替其他的异常,在异常处理程序的最后加上一条WHEN OTHERS子句,用来处理前面没有列出的所有异常。
如果PL/SQL块执行出错,或者遇到显式抛出异常的语句,则程序立即停止执行,转去执行异常处理程序。
异常被处理结束后,整个PL/SQL块的执行便告结束。

所以一旦发生异常,则在PL/SQL块的可执行部分中,从发生异常的地方开始,以后的代码将不再执行。
在PL/SQL块中有三种类型的异常,即预定义的异常非预定义的异常用户自定义的异常。
下面分别介绍这几种异常的使用方法。

预定义的异常