当前位置:文档之家› oracle 异常处理总结

oracle 异常处理总结

①异常的分类:
(1)系统自身定义的异常,比如说:除零、没有找到数据等。

(2)用户自定的异常:比如说:在规定的时间内不准修改数据;一些业务规则,比如说:工资不能低于600元,如果在输入员工信息时,输入的工资低于600,那么是不能保存数据的。

这个可以通过抛出异常的方式,也可以采用设置字段,强制使用:CHECK的方式。

(异常号的范围是:-20999~-20000)
(3)未知的异常。

在oracle中规定未知的异常指的是没有捕获的异常。

就是说:只要这个异常处理了,那么就不会是未知的异常。

②异常的定义:
CREATE OR REPLACE PACKAGE errpkg
IS
bulk_errors EXCEPTION;--定义异常
PRAGMA EXCEPTION_INIT (bulk_errors, -20381);--给该异常制定对应的数字代码。

注:EXCEPTION_INIT指定的异常名称必须存在,如果不存在,那么会报错。

END errpkg;
/
③异常的产生:
(1)当oracle执行SQL语句过程中产生错误时,产生异常。

(2)用户执行操作时,不满足规定的义务规则时,产生异常.
(3)用户在编写oracle存储过程或者函数\触发器等实用raise_application_error强制抛出异常.
④抛出异常的方法:
(1)Raise 用户自定义的异常;
在存储过程,函数,触发器等变量定义时,定义异常名称,并指定异常SQLCode,然后在实现中抛出该异常. (2)Raise package.异常异常包内定义的异常;
在存储过程,函数,触发器等实现中引用其他的包内定义的异常(必须是公共的类型).
(3)Raise;
抛出一个任意的异常.
⑤异常的处理流程:
产生异常
第一层产生异常,如果没有处理,那么抛给第二层,指导调用该存储过程的平台,比如: 应用程序.如果应用程序也没有处理,那么就产生了未知的异常.
⑥建议:
1)用户自定义的异常都应该在一个包体内部.
2)用户自定义的异常所对应的SQLCODE和SQLPrama,最好建立一个表,用来维护异常信息
3)在编写存储过程时,最好有When Others处理前面未处理的异常,但是同时又需要记录该异常,同时再把异常抛给最终的应用程序,这种处理方式可能会给客户带来反感,但是只要出现异常,就可以彻底的解决该问题.记录异常时,需要记录: SQLCODE,SQLPARAM,Machine IP,UserName,SysDate等.
⑦用例:
Create or replace procedure Test_Name(input_A number )
IS
bulk_errors EXCEPTION;--定义异常
PRAGMA EXCEPTION_INIT (bulk_errors, -20381);--给该异常制定对应的数字代码。

BEGIN
If (input_A>0) then
Raise bulk_errors;
End if;
Exception
When bulk_errors then
Dbms_output.put_line('产生了错误!');
When Others then
--'记录该错误信息'
NULL;
END;
该存储过程中,没有在其他的包体处理错误信息异常信息,同时没有存储该信息.具体得如何操作,可以参考:<oracle PL SQL programming>.并且提供完成的例子.。

相关主题