7.6.3 预定义异常

Oracle中为每个错误提供一个错误号,而捕获异常则需要异常有名称。Oracle提供了一些已经定义好名称的常用异常,这就是预定义异常。例如,前面在使用SELECT…INTO语句时,如果返回超过一条记录就会触发TOO_MANY_ROWS异常。表7.2列出了一些常用的预定义异常。

7.6.3 预定义异常 - 图1

预定义异常不止表7.2列出的这些,Oracle一共提供了25种预定义异常。表7.2中只是日常开发中比较常用的异常。利用下面的查询语句可以查看Oracle的预定义异常:


SELECT*FROM DBA_SOURCE WHERE NAME='STANDARD'AND TEXT LIKE'%EXCEPTION_INIT%';


【示例25】预定义异常示例

该示例中要求当除数为0时,做异常捕捉。脚本如下:


DECLARE

v_rslt NUMBER(10):=0;

BEGIN

v_rslt:=100/0;

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

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE('除数是零!默认用1替代除数,结果是:'||100/1);

END;


【执行效果】

执行效果如图7.30所示。

7.6.3 预定义异常 - 图2

图 7.30 捕获除数为0的异常

执行过程中出现除数为0的情况时,程序会马上进入异常捕获部分,当发生的异常和异常列表中的异常名称匹配成功时,执行WHEN…THEN下的语句序列,这样就可以避免因程序中断而产生的问题。

异常匹配的顺序是从上到下,这一点需要注意。