>데이터 베이스 >MySQL 튜토리얼 >Oracle存储过程中异常处理应注意的问题

Oracle存储过程中异常处理应注意的问题

WBOY
WBOY원래의
2016-06-07 17:08:39870검색

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

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

要依据以下原则:

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

     主调程序如下:

    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;

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

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

linux

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.