Oracle異常


分類,三類異常

  1.預定義異常

    Oracle預定義的異常,有24個,對這種異常的處理無需在程序中定義,由Oracle自動引發。

  2.非預定義異常

    其他標准的Oracle異常,對這種異常的處理,需用戶在程序中定義,然后由Oracle自動將其引發。非預定義的異常只有編號沒有名稱。

  3.用戶定義異常

    由用戶在程序自定義的異常,當出現某種用戶認為的非正常情況時,顯式地在程序中將其引發。

 

拋出方式,三種

  1.系統在運行時自動拋出

  2.通過raise語句拋出,拋出的異常為已定義有名字的;

  3.調用raise_application_error存儲過程拋出異常,可直接拋出異常代碼和異常消息;

 

非預定義異常

  1.在聲明部分聲明異常情況

    異常情況(異常名) EXCEPTION;

  2.將聲明好的異常與標准的Oracle錯誤聯系起來,使用EXCEPTION——INIT

    PRAGMA EXCEPTION_INIT(異常情況(異常名),錯誤代碼);

  3.在程序塊的異常處理部分對異常做相應處理。

    在EXCEPTION塊中做處理。

    注:預定義的異常也可通過這種方式修改名稱。

      處理未命名的異常(非預定義)必須使用OTHERS處理或者用PRAGMA為異常確定名稱;

 

用戶自定義的異常

  1.在聲明部分聲明異常情況

    語法:

      異常情況(異常名) EXCEPTION;

  2.通過raise語句觸發。手動拋出異常。

    語法:

      raise 異常情況(異常名);

  3.在程序塊的異常處理部分對異常做相應處理。

    在EXCEPTION塊中做處理。

    若自定義的異常拋出后沒有在EXCEPTION中處理,會報“用戶自定義的異常錯誤未得到處理”的錯誤。

 

處理異常

  Oracle的異常處理在EXCEPTION中,一般放在程序體的后半部分,捕獲異常的結構為

    EXCEPTION

      when 異常名1 then

        處理過程

      when 異常名2 then

        ..............

      when OTHERS then

        ..........

    END;

    ps:1.others表示其他所有的異常.

      2.在異常處理的代碼塊()中可用到這兩個關鍵字。

        SQLcode:返回錯誤號;

        SQLERRM:返回錯誤信息;

 

函數raise_application_error()

    用來拋出異常消息,可將異常傳給客戶端的應用程序。前台收到的消息包含異常代碼和異常說明。

      包含三個參數:

        第一個參數(error_number)自定義異常的代碼,取值范圍為-20000到-20999之間。

        第二個參數(error_message)為異常的說明,長度最大為2k字節,超過2k就截取。

        第三個參數(keep_errors)為可選參數,true表示將新錯誤添加到已經引發的錯誤列表中,false(缺省)表示新錯誤替換當前的錯誤列表,即值為true時打印整個異常列表。

   例:raise_application_error(-20001,'無記錄或記錄已失效');

 

例:聲明並處理拋出的自定義異常 

  DECLARE

    deadlock_detected EXCEPTION; --聲明自定義異常

    PRAGMA EXCEPTION_INIT(deadlock_detected, -60); --綁定異常代碼

  BEGIN

    ... -- Some operation that causes an ORA-00060 error

    --系統執行過程中自動拋出或使用raise拋出;

  EXCEPTION

    WHEN deadlock_detected THEN

    -- handle the error --處理異常,常用方法為異常信息寫入日志,再將異常用raise_application_error()傳給客戶端的應用程序;

  END;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM