Welcome 微信登录

首页 / 数据库 / MySQL / Oracle存储过程中异常处理应注意的问题

如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理要依据以下原则:第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,从而破坏了数据的一致性     主调程序如下:    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块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数