標籤:
在寫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 捕獲異常和拋出異常