3.7 异常处理

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

3.7.1 异常处理程序

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

figure_0124_0023

图 3.2 异常处理和异常传递

如果要在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块中有三种类型的异常,即预定义的异常、非预定义的异常和用户自定义的异常。下面分别介绍这几种异常的使用方法。