oracle plsql 捕獲異常和拋出異常

來源:互聯網
上載者:User

標籤:

在寫oracle預存程序的時候很多東西放到預存程序裡面比如一些判斷等,要比在程式邏輯裡面簡單很多,但是也會涉及到捕獲和拋出一樣的問題。

捕獲異常文法:

   

 EXCEPTION    WHEN excepttion_name1 then      ........    WHEN excepttion_name2 then     ........    WHEN excepttion_name3 then     ........ End;
例子:
declare     a  int:=0;    b int:=1;   ex_1 exception;   ex_2 exception;  begin     if a=0 then    raise ex_1;    end if;        if b=1 then       raise ex_2;    end if;        exception      when ex_1 then         DBMS_OUTPUT.put_line(‘捕獲了錯誤1‘);      when ex_2 then          DBMS_OUTPUT.put_line(‘捕獲了錯誤2‘); end;

 

輸出:
捕獲了錯誤1

 

這裡由於在ex_1的地方就出現了錯誤 ,所以下面ex_2沒有執行,而是直接跳到錯誤處理的代碼部分了。在Oracle中不允許一個異常由多個異常處理塊來處理。

利用OhtERS處理所有的錯誤
declare     a  int:=0;    ex_1 exception; begin     if a=0 then    raise ex_1;    end if;         exception       when others then        DBMS_OUTPUT.put_line(‘捕獲了全域錯誤‘);  end;


輸出:

 

拋出異常RAISE_APPLICATION_ERROR 函數

         該函數是將應用程式專有的錯誤從伺服器端轉達到用戶端應用程式(其他機器上的SQLPLUS或者前台開發語言)

PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);    error_number_in :自訂的錯誤碼,容許從 -20000 到 -20999 之間,這樣就不會與 ORACLE 的任何錯誤碼發生衝突。    error_msg_in:長度不能超過 2k,否則截取 2k

 

           例子:讓一個數不能為0

declare   a int:=0;begin    if a=0 then       RAISE_APPLICATION_ERROR(-20001,‘數值不能為0’);    end if; end;


運行:

oracle plsql 捕獲異常和拋出異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.