oracle存储过程中异常处理应注意的问题
2011-12-13 17:08
399 查看
如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理
要依据以下原则:
第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,从而破坏了数据的一致性
主调程序如下:
procedure sp_procedure
is
vs_pay_year_month varchar2(6);
vs_sql varchar2(10000);
begin
sp_procedure1;
sp_procedure2;
update emp set empname='张三' where empid='00001'
exception
WHEN OTHERS THEN
--发生异常,把禁止的触发器设为有效
vs_sql:='alter table sal_t_mainper enable all triggers';
execute immediate vs_sql;
end;
子程序:
procedure sp_procedure1
is
begin
update department set dept_name='人事部' where deptid='0001'
delete from department where deptid='0002'
exception
WHEN OTHERS THEN
--发生异常,把禁止的触发器设为有效
raise_application_error(-20001, '删除发生错误!');
end;
所以,在子程序中不允许处理异常,这样就会破坏数据的一致性
第二、如果主程序和子程序不作为一个事务来处理,则在子程序中可以触发异常,但这种情况很少
要依据以下原则:
第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,从而破坏了数据的一致性
主调程序如下:
procedure sp_procedure
is
vs_pay_year_month varchar2(6);
vs_sql varchar2(10000);
begin
sp_procedure1;
sp_procedure2;
update emp set empname='张三' where empid='00001'
exception
WHEN OTHERS THEN
--发生异常,把禁止的触发器设为有效
vs_sql:='alter table sal_t_mainper enable all triggers';
execute immediate vs_sql;
end;
子程序:
procedure sp_procedure1
is
begin
update department set dept_name='人事部' where deptid='0001'
delete from department where deptid='0002'
exception
WHEN OTHERS THEN
--发生异常,把禁止的触发器设为有效
raise_application_error(-20001, '删除发生错误!');
end;
所以,在子程序中不允许处理异常,这样就会破坏数据的一致性
第二、如果主程序和子程序不作为一个事务来处理,则在子程序中可以触发异常,但这种情况很少
相关文章推荐
- Oracle 存储过程异常处理
- [转]Oracle存储过程中的异常处理
- ORACLE存储过程及注意问题
- Oracle,SqlServer,DB2存储过程中异常处理
- oracle 在存储过程自定义异常的处理方法
- Oracle 存储过程异常处理 .
- Oracle - 存储过程异常处理事务分析
- Oracle存储过程中异常Exception的捕捉和处理
- 关于Oracle存储过程中的IN子句传参的问题(不能直接传字符串,需要处理)
- PLSQL存储过程调用存储过程对异常的处理问题
- Oracle,SqlServer,DB2存储过程中异常处理
- 游标循环来处理复杂问题,多用于存储过程中
- mysql的存储过程里面异常处理模块 为什么获取不了错误码?
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- oracle编译存储过程提示表或视图不存在的问题分析
- Java异常处理、异常处理使用的一些注意点(例如,基类和子类捕获的顺序问题)
- oracle 父存储过程调用子过程的事务问题
- Java Socket常见异常处理 和 网络编程需要注意的问题
- oracle创建存储过程中遇到的问题
- Oracle 存储过程部署时sqlplus无响应问题记录