Oracle預存程序中異常處理應注意的問題

來源:互聯網
上載者:User

如果主預存程序和主函數又由子過程或子函數構成,在子函數或子程式中能否包含異常處理

要依據以下原則:

第一、如果主程式和子程式要作為一個事務來處理,則在子程式中不能觸發異常,異常要到主調程式中取處理,如果在子程式中進行異常處理,如果子程式出現異常,進行異常處理後,還會繼續執行主調程式中調用的出現異常的子程式的下面的代碼,這樣又開始了新的事務,這樣破壞了事務的一致性,從而破壞了資料的一致性

     主調程式如下:

    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;

所以,在子程式中不允許處理異常,這樣就會破壞資料的一致性

 第二、如果主程式和子程式不作為一個事務來處理,則在子程式中可以觸發異常,但這種情況很少。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.