7.6 PL/SQL中的异常

同其他语言的程序一样,用PL/SQL编写的程序在运行过程当中也会出现各种错误,这些错误也可以称为异常。异常在PL/SQL中是很重要的一部分。

7.6.1 什么是异常

PL/SQL运行过程中有可能会出现错误,这些错误有的来自程序本身,也有的来自开发人员自定义的数据,而所有的这些错误我们称之为异常(编译时的错误不能称为异常)。

为了使程序有更好的阅读性和健壮性,PL/SQL采用了捕获并统一处理异常的方式。当异常发生时,程序会无条件跳转到异常块处,将控制权限交给异常处理程序。异常处理程序将进行异常匹配,如果当前的块内没有对应的异常名称,则异常会传至当前程序的上一层程序中查找,如果一直向上查找却依然没有找到对应的处理方式,则该异常会被传至当前的主机调用中,而运行的程序也会中断。

【示例24】异常演示示例

脚本演示了除数为0的异常。脚本如下:


01 DECLARE

02 v_rslt NUMBER(10):=0;

03 BEGIN

04 v_rslt:=100/0;

05 DBMS_OUTPUT.PUT_LINE('结果是:'||v_rslt);

06 END;

07 /


【代码解析】

❑第4行表示求除法运算的结果,不过这里除数出现了0,除数为0在四则混合运算中是不被允许的,编译程序时会正常通过,但执行程序时会出现错误提示,也就是有异常抛出。

【执行效果】

在SQL*Plus下执行示例脚本,执行过程见图7.29。

7.6 PL/SQL中的异常 - 图1

图 7.29 PL/SQL异常演示

从执行结果中可以看出,程序出现错误,提示除数为0,"ORA-01476"是错误号。除数为0的异常属于Oracle内部定义异常。