1、5PL/SQL程序设计成都信息工程学院 软件工程系1-2成都信息工程学院 软件工程系PL/SQL的异常处理PL/SQL程序设计1-3成都信息工程学院 软件工程系异常处理 什么是异常 ? 在 PL/SQL中的一个标识。 在程序运行期间被触发的错误。 异常是怎样被触发的 ? 产生一个 Oracle错误。 用户显示触发。 怎样处理异常 ? 用异常处理句柄捕获异常。 传播异常到调用环境 。PL/SQL程序设计*异常处理,仅用来处理 PL/SQL运行时错误。1-4成都信息工程学院 软件工程系异常处理捕获异常捕获异常DECLAREBEGINEND;异常被触发异常被触发EXCEPTION异常被捕获异常被捕获
2、传播异常传播异常DECLAREBEGINEND;异常被触发异常被触发EXCEPTION异常没有被捕获异常没有被捕获异常被传播给调用程序异常被传播给调用程序的环境的环境PL/SQL程序设计1-5成都信息工程学院 软件工程系异常的类型 Oracle服务器预定义异常 非 Oracle服务器预定义异常 用户自定义异常 隐式触发隐式触发显式触发显式触发PL/SQL程序设计1-6成都信息工程学院 软件工程系捕获异常EXCEPTIONWHEN exception1 OR exception2 . . . THENstatement1;statement2;. . .WHEN exception3 OR ex
3、ception4 . . . THENstatement1;statement2;. . .WHEN OTHERS THENstatement1;statement2;. . .语法PL/SQL程序设计1-7成都信息工程学院 软件工程系捕获异常规则 WHEN OTHERS用于捕获所有未指定错误。必须是最后一个错误处理语句。 EXCEPTION关键字,标识异常处理的开始区域。 允许有多个异常处理子句。 在离开异常处理程序块之前,只能有一个错误处理子句被执行。PL/SQL程序设计1-8成都信息工程学院 软件工程系捕获 Oracle服务器预定义错误 NO_DATA_FOUND (ORA-1403)
4、TOO_MANY_ROWS (ORA-1422) INVALID_CURSOR (ORA-1001) ZERO_DIVIDE (ORA-1476) DUP_VAL_ON_INDEX (ORA-0001) VALUE_ERROR (ORA-6502)PL/SQL程序设计1-9成都信息工程学院 软件工程系捕获 Oracle服务器预定义错误BEGIN SELECT . COMMIT;EXCEPTIONWHEN NO_DATA_FOUND THENstatement1; statement2; WHEN TOO_MANY_ROWS THENstatement1;WHEN OTHERS THENstatement1; statement2; statement3;END; 语法PL/SQL程序设计1-10成都信息工程学院 软件工程系捕获非 Oracle服务器预定义错误Declare Name the exceptionAssociate Code the PRAGMA EXCEPTION_INITDeclarative SectionReference Handle the raised exceptionException-HandlingSectionPL/SQL程序设计将一个经过命名的异常和一个特别的 Oracle错误相关联。