在写存储过程中,有时候需要返回出错的原因,以方便查看记录。
Oracle提供了以下异常:
1.预定义异常:用于处理常见的Oracle错误。
2.非预定义异常:用于处理预定义异常所不能处理的Oracle错误。
3.自定义异常:用于处理Oracle错误无关的其它情况。
异常处理以关键字Exception开始,语法如下:
EXCEPTION
WHEN exception_Name THEN --exception_Name为异常的名字
statement1;
WHEN OTHERS THEN
statement1;
常见系统异常参考表:
命名的系统异常 产生原因
access_into_null 未定义对象
CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时
COLLECTION_IS_NULL 集合元素未初始化
CURSER_ALREADY_OPEN 游标已经打开
DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值
INVALID_CURSOR 在不合法的游标上进行操作
INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字
NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的元素时
TOO_MANY_ROWS 执行 select into 时,结果集超过一行
ZERO_DIVIDE 除数为 0
SUBSCRIPT_BEYOND_COUNT 元素下标超过嵌套表或 VARRAY 的最大值
SUBSCRIPT_OUTSIDE_LIMIT 使用嵌套表或 VARRAY 时,将下标指定为负数
VALUE_ERROR 赋值时,变量长度不足以容纳实际数据
LOGIN_DENIED 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码
NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据
PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包
ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容
SELF_IS_NULL 使用对象类型时,在 null 对象上调用对象方法
STORAGE_ERROR 运行 PL/SQL 时,超出内存空间
SYS_INVALID_ID 无效的 ROWID 字符串
TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时
示例:
DECLARE
e_integrity EXCEPTION; --1、定义部分
PRAGMA EXCEPTION_INIT (e_integrity, -2291); --2、建立关联关系
BEGIN
Update emp Set deptno= :dno Where empno= :eno;
EXCEPTION
WHEN e_integrity THEN --3、捕捉处理
DBMS_OUTPUT.PUT_LINE(‘该部门不存在’);
END;
作者:zeke
出处:http://zhf.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。