第21章 异常处理.docVIP

  • 1
  • 0
  • 约4.93千字
  • 约 8页
  • 2017-12-22 发布于河南
  • 举报
第21章 异常处理

第21章 异常处理 /****************第21章 异常处理*****************/ 使用RAISE语句抛出一个用户自定义的异常e_illegalValue。 DECLARE e_ illegalValue EXCEPTION; v_ result NUMBER (3); BEGIN /*查询学生编号为s102203,课程编号为t105的成绩*/ SELECT result INTO v_ result FROM t_result WHERE stuID =s102203 AND curID = t105; /*当查询到的学生成绩大于100 或者小于0时,抛出异常*/ IF v_ result 100 OR v_ result 0 THEN RAISE e_illegalValue; END IF; END; 使用RAISE语句显式抛出预定义异常的例子。 DECLARE v_ resultPoin NUMBER (3); -- 成绩绩点 v_credit NUMBER (1); -- 课程学分 BEGIN /*查询学生编号为s102203,课程编号为t105的成绩绩点*/ SELECT R.result / C.credit , C.credit INTO v_ resultPoin.,v_credit FROM t_result R ,t_curriculum C WHERE R curID. =C. curID AND stuID =s102203 AND curID = t105; /*当查询到的课程学分=0时,抛出异常*/ IF v_credit = 0THEN RAISE ZERO_DIVIDE; END IF; END; 处理预定义异常 DECLARE v_salary NUMBER(6,2); -- 教师工资 BEGIN /* 查询指定教师编号的教师工资*/ SELECT salary INTO v_salary FROM t_teacher WHERE teaID= t156354; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE (‘查询数据不存在’); INSERT INTO t_log -- 将错误信息写入日志表中 VALUES(‘teaID does not exist!’ ,SYSDATE, ‘admin’); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE (‘查询的结果多于1行’); INSERT INTO t_log -- 将错误信息写入日志表中 VALUES(‘teaID row is over 1!’ ,SYSDATE, ‘admin’); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (‘发生其他错误’); INSERT INTO t_log -- 将错误信息写入日志表中 VALUES(‘Oracle errort!’ ,SYSDATE, ‘admin’); END; 处理自定义异常 DECLARE e_ illegalValue EXCEPTION; e_ noRows EXCEPTION; v_ result NUMBER (3); BEGIN /*查询学生编号为s102203,课程编号为t105的成绩*/ SELECT result INTO v_ result FROM t_result WHERE stuID =s102203 AND curID =’ t105; /*没有查询到数据,抛出e_ noRows异常*/ IF SQL%NOTFOUND THEN RAISE e_ noRows; END IF; /*当查询到的学生成绩大于100 或者小于0时,抛出e_illegalValue异常*/ IF v_ result 100 OR v_ result 0 THEN RAISE e_illegalValue; END IF; EXCEPTION WHEN e_ noRows THEN DBMS_OUTPUT.PUT_LINE (‘查询数据不存在’); INSERT INTO t_log -- 将错误信息写入日志表中 VALUES(‘

文档评论(0)

1亿VIP精品文档

相关文档