文档详情

ZTESOraclePLSQL中的游标与异常处理十三讲.ppt

发布:2017-05-26约6.67千字共41页下载文档
文本预览下载声明
系统预定义异常 BEGIN SELECT ... COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN statement1; statement2; WHEN TOO_MANY_ROWS THEN statement1; WHEN OTHERS THEN statement1; statement2; statement3; END; 语法 捕捉系统非预定义异常 定义 为异常命名 关联 进行初始化PRAGMA EXCEPTION_INIT 声明部分 引用 处理异常 异常处理部分 DECLARE v_message VARCHAR2(50); BEGIN . . . EXCEPTION WHEN THEN :g_message := Product code specified is not valid.; . . . END; 系统非预定义异常 捕捉2292号Oracle异常 integrity constraint violation e_products_invalid EXCEPTION; 1 PRAGMA EXCEPTION_INIT (e_products_invalid, -2292); 2 e_products_invalid 3 捕捉用户自定义异常 给异常命名 定义 声明部分 触发 使用RAISE语句显式触发异常 执行部分 引用 处理异常 异常处理部分 用户自定义异常 DECLARE e_amount_remaining EXCEPTION; . . . BEGIN . . . RAISE e_amount_remaining; . . . EXCEPTION WHEN e_amount_remaining THEN :g_message := There is still an amount in stock.; . . . END; 举例 e_amount_remaining EXCEPTION; 1 RAISE e_amount_remaining; 2 e_amount_remaining 3 捕捉异常的系统函数 SQLCODE:返回错误号 SQLERRM:返回错误信息 DECLARE v_error_code NUMBER; v_error_message VARCHAR2(255); BEGIN ... EXCEPTION ... WHEN OTHERS THEN ROLLBACK; v_error_code := ; v_error_message := ; INSERT INTO errors VALUES(v_error_code,v_error_message); END; SQLCODE SQLERR 异常的传递 BEGIN SELECT ... UPDATE ... IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; EXCEPTION WHEN e_integrity THEN ... WHEN e_no_rows THEN ... END; DECLARE e_no_rows exception; e_integrity exception; PRAGMA EXCEPTION_INIT (e_integrity, -2292); BEGIN FOR c_record IN emp_cursor LOOP END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN . . . WHEN TOO_MANY_ROWS THEN . . . END; 在内层块可以处理异常,也可以将异常传递到它的外层块中去处理 RAISE_APPLICATION_ERROR 语法 利用RAISE_APPLICATION_ERROR过程可以返回一个非标准的错误代码和错误消息. 在执行存储子程序中调用这个过程 可以在以下两个部分使用这个过程: 执行部分 异常处理部分 使用与ORACLE数据库服务器返回错误相同的方式返回用户定义的应用程序错误 raise_application_error (error_number,message[, {TRUE |FALSE}]); 小结 在本课中,您应该学会: 两种类型的游标: 隐式游标 显式游标 处理显式游标 使用
显示全部
相似文档