7.6.3 预定义异常
Oracle中为每个错误提供一个错误号,而捕获异常则需要异常有名称。Oracle提供了一些已经定义好名称的常用异常,这就是预定义异常。例如,前面在使用SELECT…INTO语句时,如果返回超过一条记录就会触发TOO_MANY_ROWS异常。表7.2列出了一些常用的预定义异常。
预定义异常不止表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.30 捕获除数为0的异常
执行过程中出现除数为0的情况时,程序会马上进入异常捕获部分,当发生的异常和异常列表中的异常名称匹配成功时,执行WHEN…THEN下的语句序列,这样就可以避免因程序中断而产生的问题。
异常匹配的顺序是从上到下,这一点需要注意。