Oracle笔记---异常处理
来源:互联网 发布:免费网盘系统源码 编辑:程序博客网 时间:2024/05/17 23:24
Oracle笔记---异常处理
1、什么是异常:
在PL/SQL中的一个警告或错误的情形都可被称为异常。包括编译时错误(PLS)和运行时错误(ORA)。一个异常通常包含一个错误代码和错误文本,分别指示异常的编号和具体错误信息。
2、常用的函数和过程:
SQLCODE: 返回错误代码,没有错误时返回0
SQLERRM:返回错误消息.
PRAGMA EXCEPTION_INIT():把用户自定义异常与相应的错误代码关联,使用用户自定义异常来捕获、处理错误
RAISE_APPLICATION_ERROR:可用于定义用户错误消息和在使用该过程的位置上暂 停程序的执行。
3、异常的分类:
系统预定义异常
未预定义的异常
自定义异常
4、异常的结构:
① 系统预定义异常:
BEGIN
.......
EXCEPTION
WHEN 异常类型1[OR 异常类型2] THEN
......异常处理代码
WHEN 异常类型3[OR 异常类型4] THEN
......异常处理代码
WHEN OTHERS THEN
.....异常处理代码
END;
系统异常:系统异常是有oracle预先定义好的异常类型,当发生这种异常是系统会自动触发
Oracle预定义的21个系统异常类型
命名的系统异常
产生原因
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
PL/SQL应用程序连接到 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
test varchar(10);
BEGIN
SELECT DNAME INTO test FROM DEPT WHERE DEPTNO='11';
DBMS_OUTPUT.PUT_LINE(test);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到符合条件的数据');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('返回的数据行过多');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EORROR:'||SQLCODE||'-'||SQLERRM);
END;
② 未预定义异常:
由PL/SQL或SQL触发,没有与之相关联的预定义异常名称。
两个处理方法
A. 使用包含WHEN ...OTHERS字句处理异常程序,使用SQLCODE或SQLERRM捕获错误
B.把用户自定义异常与相应的错误代码关联,使用用户自定义异常来捕获、处理错误,使用PRAGMA EXCEPTION_INIT(exce_name,error_code),其中error_code的范围是:-1 ~ -12999
例如:
DEFINE p_deno = 10
DECLARE
e_emp_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT (e_emp_remaining, -2292);
BEGIN
DELETE FROM departments
WHERE dept_id = &p_dno;
COMMIT;
EXCEPTION
WHEN e_emp_remaining THEN
DBMS_OUTPUT.PUT_LINE ('Cannot delete dept ' ||
TO_CHAR(&p_deptno) || '. employees exist. ');
END;
③ 自定义异常:是由用户根据自己的业务需要定义的异常。
例如:
DECLARE
name varchar(10);
ex EXCEPTION; --定义异常ex
BEGIN
SELECT DNAME INTO name FROM DEPT WHERE DEPTNO='10';
DBMS_OUTPUT.PUT_LINE(name);
IF NAME<>'HR' THEN
RAISE ex; --触发异常
END IF;
EXCEPTION
WHEN ex THEN
DBMS_OUTPUT.PUT_LINE('10号部门不是HR'); --处理异常
END;
用户自定义错误消息:
使用RAISE_APPLICATION_ERROR过程定制,格式RAISE_APPLICATION_ERROR(error_no IN NUMBER,error_message IN VARCHAR2[,keep_errors IN BOOLEAN])
---error_no: -20000~ -20999之间的任意负整数
---error_message:错误提示消息,最大不能超过512个字符
---keep_errors:可选项,如果keep_errors为TRUE,则这个新的错误将加在已产生的错误列表之后。如果keep_errors为FALSE,则这个新错误将代替当前的错误列表。默认为FALSE
1、什么是异常:
在PL/SQL中的一个警告或错误的情形都可被称为异常。包括编译时错误(PLS)和运行时错误(ORA)。一个异常通常包含一个错误代码和错误文本,分别指示异常的编号和具体错误信息。
2、常用的函数和过程:
SQLCODE: 返回错误代码,没有错误时返回0
SQLERRM:返回错误消息.
PRAGMA EXCEPTION_INIT():把用户自定义异常与相应的错误代码关联,使用用户自定义异常来捕获、处理错误
RAISE_APPLICATION_ERROR:可用于定义用户错误消息和在使用该过程的位置上暂 停程序的执行。
3、异常的分类:
系统预定义异常
未预定义的异常
自定义异常
4、异常的结构:
① 系统预定义异常:
BEGIN
.......
EXCEPTION
WHEN 异常类型1[OR 异常类型2] THEN
......异常处理代码
WHEN 异常类型3[OR 异常类型4] THEN
......异常处理代码
WHEN OTHERS THEN
.....异常处理代码
END;
系统异常:系统异常是有oracle预先定义好的异常类型,当发生这种异常是系统会自动触发
Oracle预定义的21个系统异常类型
命名的系统异常
产生原因
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
PL/SQL应用程序连接到 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
test varchar(10);
BEGIN
SELECT DNAME INTO test FROM DEPT WHERE DEPTNO='11';
DBMS_OUTPUT.PUT_LINE(test);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到符合条件的数据');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('返回的数据行过多');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EORROR:'||SQLCODE||'-'||SQLERRM);
END;
② 未预定义异常:
由PL/SQL或SQL触发,没有与之相关联的预定义异常名称。
两个处理方法
A. 使用包含WHEN ...OTHERS字句处理异常程序,使用SQLCODE或SQLERRM捕获错误
B.把用户自定义异常与相应的错误代码关联,使用用户自定义异常来捕获、处理错误,使用PRAGMA EXCEPTION_INIT(exce_name,error_code),其中error_code的范围是:-1 ~ -12999
例如:
DEFINE p_deno = 10
DECLARE
e_emp_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT (e_emp_remaining, -2292);
BEGIN
DELETE FROM departments
WHERE dept_id = &p_dno;
COMMIT;
EXCEPTION
WHEN e_emp_remaining THEN
DBMS_OUTPUT.PUT_LINE ('Cannot delete dept ' ||
TO_CHAR(&p_deptno) || '. employees exist. ');
END;
③ 自定义异常:是由用户根据自己的业务需要定义的异常。
例如:
DECLARE
name varchar(10);
ex EXCEPTION; --定义异常ex
BEGIN
SELECT DNAME INTO name FROM DEPT WHERE DEPTNO='10';
DBMS_OUTPUT.PUT_LINE(name);
IF NAME<>'HR' THEN
RAISE ex; --触发异常
END IF;
EXCEPTION
WHEN ex THEN
DBMS_OUTPUT.PUT_LINE('10号部门不是HR'); --处理异常
END;
用户自定义错误消息:
使用RAISE_APPLICATION_ERROR过程定制,格式RAISE_APPLICATION_ERROR(error_no IN NUMBER,error_message IN VARCHAR2[,keep_errors IN BOOLEAN])
---error_no: -20000~ -20999之间的任意负整数
---error_message:错误提示消息,最大不能超过512个字符
---keep_errors:可选项,如果keep_errors为TRUE,则这个新的错误将加在已产生的错误列表之后。如果keep_errors为FALSE,则这个新错误将代替当前的错误列表。默认为FALSE
- Oracle笔记---异常处理
- 转载:学习笔记:oracle异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- ORACLE PL/SQL异常处理(Exception)学习笔记
- Oracle 学习笔记12 —— 异常处理
- Oracle 学习笔记 17 -- 异常处理(PL/SQL)
- Oracle数据库学习笔记之异常处理,存储过程
- oracle数据异常处理
- oracle的异常处理
- Oracle异常处理
- Oracle异常处理
- Oracle的异常处理
- oracle异常处理 例解
- ORACLE中的异常处理
- 第十一周项目4—二叉树算法验证哈夫曼树
- 第十二周项目1-图基本算法库
- 第十周 项目3:利用二叉树遍历思想解决问题
- RxJava—Subject系列
- ReactNative接入微信API
- Oracle笔记---异常处理
- 队列(queue)原理
- android studio 中获得发布版 SHA1 和开发版 SHA1
- JS组件系列——表格组件神器:bootstrap table
- 柴静-雾霾调查 穹顶之下
- io文件读写
- 第十周项目二 二叉树遍历的递归算法
- bootstrapTable api
- 第十二周--操作用邻接表储存的图