oracle plsql 捕獲異常和拋出異常


在寫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;


輸出:image

 

拋出異常

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;


運行:

image

打賞

免責聲明!

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



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