在程序运行时出现的错误,称为异常。发生异常后,语句将停止执行,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关键字开始异常处理。

    语法格式:异常处理

    1. BEGIN
    2. -- 可执行部分
    3. EXCEPTION -- 异常处理开始
    4. WHEN 异常名1 THEN
    5. -- 对应异常处理
    6. WHEN 异常名2 THEN
    7. -- 对应异常处理
    8. …… ……
    9. WHEN OTHERS THEN
    10. -- 其他异常处理
    11. END;

    语法解析:
    异常发生时,进入异常处理部分,具体的异常与若干个WHEN子句中指明的异常名匹配,匹配成功就进入对应的异常处理部分,如果对应不成功,则进入OTHERS进行处理。