Oracle教程:PL/SQL引发应用程序异常处理
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询Oracle教程:PL/SQL引发应用程序异常处理,在Oracle开发中,遇到的系统异常都有对应的异常码,在应用系统开发中,用户自定义的异常也可以指定一个异常码和异常信息,Oracle系统为用户预留了自定义异常码,其范围介于-20000到-20999之间的负整数。引发应用程序异常的语法是:
RAISE_APPLICATION_ERROR(异常码,异常信息)
案例12:引发系统异常
代码演示:引发应用系统异常
SQL> DECLARE 2 sal emp.sal%TYPE; 3 myexp EXCEPTION; 4 BEGIN 5 SELECT sal INTO sal FROM emp WHERE
ename='JAMES'; 6 IF sal<5000 THEN 7 RAISE myexp; 8 END IF; 9 EXCEPTION 10 WHEN NO_DATA_FOUND THEN 11 dbms_output.put_line('NO RECORDSET
FIND!'); 12 WHEN MYEXP THEN 13
RAISE_APPLICATION_ERROR(-20001,'SAL IS TO LESS!'); ① 14 END; 15 / ORA-20001: SAL IS TO LESS! ② ORA-06512: 在 line 14 |
代码解析:
① 引发应用系统异常,指明异常码和异常信息。
② 在控制台上显示异常码和异常信息。
如果要处理未命名的内部异常,必须使用OTHERS异常处理器。也可以利用PRAGMA EXCEPTION_INIT把一个异常码与异常名绑定。
PRAGMA由编译器控制,PRAGMA在编译时处理,而不是在运行时处理。EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码绑定起来,这样可以通过异常名引用任意的内部异常,并且可以通过异常名为异常编写适当的异常处理器。PRAGMA EXCEPTION_INIT的语法是:
PRAGMA EXCEPTION_INIT(异常名,异常码)
这里的异常码可以是用户自定义的异常码,也可以是Oracle系统的异常码。
案例13:PRAGMA EXCEPTION_INIT异常
代码演示:PRAGMA EXCEPTION_INIT异常
<<outterseg>> DECLARE null_salary EXCEPTION; PRAGMA
EXCEPTION_INIT(null_salary, -20101); ① BEGIN <<innerStart>> ② DECLARE curr_comm NUMBER; BEGIN SELECT comm INTO curr_comm
FROM emp WHERE empno = &empno; IF curr_comm IS NULL THEN
RAISE_APPLICATION_ERROR(-20101, 'Salary is missing'); ③ ELSE dbms_output.put_line('有津贴'); END IF; END; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('没有发现行'); WHEN null_salary THEN dbms_output.put_line('津贴未知');
④ WHEN OTHERS THEN dbms_output.put_line('未知异常'); END; |
代码解析:
① 把异常名称null_salary与异常码-20101关联,该语句由于是预编译语句,必须放在声明部分。也就是说-20101的异常名称就是null_salary。
② 嵌套PL/SQL语句块
③ 在内部PL/SQL语句块中引发应用系统异常-20101。
④ 在外部的PL/SQL语句块中就可以用异常名null_salary进行捕获。