oracle中的预定异常和自定义异常

预定异常

  oracle中的预定异常情况大约有24个,对于这种异常情况的处理,无须再程序中定义,可用oracle自动引发,常见的预定异常如下

异常 说明
ACCESS_INTO_NULL 在未初始化对象时出现
CASE_NOT_FOUND CASE语句中的选项与用户输入的数据不匹配时出现
COLLECTION_IS_NULL 给尚未初始化的表或数组赋值时出现
CURSOR_ALREADY_OPEN 在用户试图重新打开已经打开的游标时出现。在重新打开游标前必须先将其关闭
DUP_VAL_ON_INDEX 在用户试图将重复的值存储在使用唯一索引的数据库列中时出现
INVALID_CURSOR 在执行非法游标运算( 如打开一个尚未打开的游标)时出现
INVALID_NUMBER 在将字符串转换为数字时出现
LOGIN_DENTED 在输入的用户名或密码无效时出现
NO_ DATA_FOUND 在表中不存在请求的行时出现。此外,当程序引用已经删除的元素时,也会引发NO_ DATA FOUND异常
STORAGE_ERROR 在内存损坏或PLSQL耗尽内存时出现
TOO_MANY_RowS 在执行SELECT INTO语句后返回多行时出现
VALUE_ERROR 在产生大小限制错误时出现,例如, 变量中的列值超出变量的大小
ZERO_ DIVIDE 以零作为除数时出现

处理自定义异常

  在程序执行过程中,出现编程人员认为的非正常情况,对于这种情况的处理,需要用户在程序中定义,然后显示的将其在程序中引发

对于这类异常情况的处理,步骤如下

在pl/sql块的定义异常情况

  <异常情况> exception;

抛出异常情况

  raise  <异常情况>

预定异常

--异常
declare
   v_comm emp.comm%type;
   e_comm_is_null exception;           --定义异常类型变量
begin
   select comm into v_comm from emp where empno=7788;
   if v_comm is null then
      raise e_comm_is_null;
   end if;
exception
   when no_data_found then
     dbms_output.put_line('雇员不存在!错误为:'||SQLcode||SQLErrm);
   when e_comm_is_null then
     dbms_output.put_line('该雇员无补助');
end;

结果:

用户自定义异常

--自定义异常
declare
   v_comm emp.comm%type;
begin
   select comm into v_comm from emp where empno=7788;
   if v_comm is null then
      raise_application_error('-20010','该雇员无补助');
   end if;
end;

结果:

 注意自定义异常的编号范围是 -20999-20000之间的负整数,消息长度最长为2048字节

猜你喜欢

转载自www.cnblogs.com/hfx123/p/9942513.html