视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle存储过程中异常处理应注意的问题
2020-11-09 11:46:33 责编:小采
文档


如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理 要依据以下原则: 第一、如果主程序和子程

如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理

要依据以下原则:

第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,,从而破坏了数据的一致性

主调程序如下:

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;

所以,在子程序中不允许处理异常,这样就会破坏数据的一致性

第二、如果主程序和子程序不作为一个事务来处理,则在子程序中可以触发异常,但这种情况很少。

下载本文
显示全文
专题