由用户自己定义
1、定义异常名称,类型exception
2、举出异常(raise excepttion)
3、捕获异常
SQL> declare 2 e_user_err exception; 3 v_deptno dept.deptno%type := &no; 4 begin 5 update dept set loc=‘HongKong‘ where deptno=v_deptno; 6 7 if sql%notfound then 8 raise e_user_err; 9 end if; 10 commit; 11 exception 12 when e_user_err then 13 dbms_output.put_line(‘This department ‘||v_deptno|| ‘ is not in dept table ,please input correct number !‘); 14 end;
非预定义异常,通过oracle ORA-XXXX错误代码,建立异常捕获!
-------违背了参考性约束 declare e_emp_remain exception; pragma exception_init( e_emp_remain ,-2292); v_deptno dept.deptno%type :=&no; begin delete from dept where deptno=v_deptno; commit; exception when e_emp_remain then dbms_output.put_line (‘Don‘‘t remove this ‘||v_deptno||‘ department !‘||‘ , This record is in emp !‘); when others then dbms_output.put_line (‘Others error !‘); end;
SQL> declare 2 e_emp_remain exception; 3 pragma exception_init( e_emp_remain ,-2291); 4 5 v_empno emp.empno%type :=&n; 6 v_deptno emp.deptno%type :=&nn; 7 8 begin 9 update emp set deptno=v_deptno where empno=v_empno; 10 commit; 11 exception 12 when e_emp_remain then 13 dbms_output.put_line (‘Department is not exists !‘); 14 when others then 15 dbms_output.put_line (‘Others error !‘); 16 end;
获取others中错误代码和错误信息:
sqlcode: oracle 错误代码 sqlerrm: oracle 错误信息
SQL> declare 2 v_code errors.code%type; 3 v_msg errors.msg%type; 4 v_sal emp.sal%type; 5 6 begin 7 8 select sal into v_sal from emp where deptno=&no; 9 10 exception 11 when no_data_found then 12 dbms_output.put_line(‘No this department ID‘); 13 when others then 14 dbms_output.put_line(‘Others error ‘); 15 v_code := sqlcode; 16 v_msg := sqlerrm; 17 dbms_output.put_line(v_msg); 18 19 insert into errors values(v_code,v_msg); 20 commit; 21 end;
通过捕获的代码建立非预定义异常:
SQL> declare 2 e_emp_err exception; 3 pragma exception_init( e_emp_err ,-1422); 4 5 v_sal emp.sal%type; 6 7 begin 8 select sal into v_sal from emp where deptno=&no; 9 commit; 10 exception 11 when e_emp_err then 12 dbms_output.put_line (‘ Return rows more than one row !‘); 13 when others then 14 dbms_output.put_line (‘Others error !‘); 15 end;
时间: 2024-12-28 16:06:44