在程序运行时出现的错误,称为异常。发生异常后,语句将停止执行,PL/SQL引擎立即将控制权转到PL/SQL块的异常处理部分。异常处理机制简化了代码中的错误检测。PL/SQL中任何异常出现时,每一个异常都对应一个异常码和异常信息。
为了Oracle开发和维护的方便,在Oracle异常中,为常见的异常码定义了对应的异常名称,称为预定义异常,常见的预定义异常有:
| 异常名称 | 异常码 | 描述 |
|---|---|---|
| DUP_VAL_ON_INDEX | ORA-00001 | 试图向唯一索引列插入重复值 |
| INVALID_CURSOR | ORA-01001 | 试图进行非法游标操作 |
| INVALID_NUMBER | ORA-01722 | 试图将字符串转换为数字 |
| NO_DATA_FOUND | ORA-01403 | SELECT INTO语句中没有返回任何记录 |
| TOO_MANY_ROWS | ORA-01422 | SELECT INTO语句中返回多于1条记录 |
| ZERO_DIVIDE | ORA-01476 | 试图用0作为除数 |
| CURSOR_ALREADY_OPEN | ORA-06511 | 试图打开一个已经打开的游标 |
表6 PL/SQL中预定义异常
PL/SQL中用EXCEPTION关键字开始异常处理。
语法格式:异常处理
BEGIN-- 可执行部分EXCEPTION -- 异常处理开始WHEN 异常名1 THEN-- 对应异常处理WHEN 异常名2 THEN-- 对应异常处理…… ……WHEN OTHERS THEN-- 其他异常处理END;
语法解析:
异常发生时,进入异常处理部分,具体的异常与若干个WHEN子句中指明的异常名匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入OTHERS进行处理。
