Heim >Datenbank >MySQL-Tutorial >Oracle存储过程中异常处理应注意的问题

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

WBOY
WBOYOriginal
2016-06-07 17:08:39867Durchsuche

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

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

要依据以下原则:

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

     主调程序如下:

    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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn