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字节