oracle存儲過程異常捕獲


oracle存儲過程異常捕獲學習,執行及演示過程:

存儲過程:

 

    CREATE OR REPLACE PROCEDURE sp_test_2  
    (  
       param1 in int,     --輸入參數  
       param2 in int,      
       out_return out varchar2 --返回結果  
    )  
    is  
       --全局變量  
       val int;   
       errorException exception; --申明異常  
       errorCode number; --異常代號  
       errorMsg varchar2(1000); --異常信息  
       flag varchar2(10);  
    begin  
         flag := 'true';  
         out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
         val := param1/param2;  
         --/*  
         exception  
             when errorException then  
                  errorCode := SQLCODE;  
                  errorMsg := SUBSTR(SQLERRM, 1, 200);   
                  flag := 'false';  
                  out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
             when others then  
                   errorCode := SQLCODE;      
                   errorMsg := SUBSTR(SQLERRM, 1, 200);   
                   flag := 'false';  
                   out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
         --dbms_output.put_line(errorCode || ',' || errorMsg);   
         --*/  
    end sp_test_2;  

 

演示存儲過程:

    DECLARE   
       out_return varchar2(1000);  
       val int; --全局變量  
       errorException exception; --申明異常  
       errorCode number; --異常編碼  
       errorMsg varchar2(1000); --異常信息  
       flag varchar2(10);  
    begin  
         flag := 'true';  
         out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
         val := 1/0;  
         exception  --異常捕捉,不要把有需要的代碼放在異常捕捉后面,有異常才會執行異常代碼下所有代碼,沒有異常不會執行  
             when errorException then  
                  errorCode := SQLCODE;  
                  errorMsg := SUBSTR(SQLERRM, 1, 200);   
                  flag := 'false';  
                  out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
             when others then  
                   errorCode := SQLCODE;      
                   errorMsg := SUBSTR(SQLERRM, 1, 200);   
                   flag := 'false';  
                   out_return := 'flag=' || flag || ',errorCode=' || errorCode || ',errorMsg=' || errorMsg;  
           
         dbms_output.put_line(out_return);       
    end;  

sqlplus中執行存儲過程:

    DECLARE   
         out_return varchar2(1000);  
    begin  
         sp_test_2(1,0,out_return);  
         dbms_output.put_line(out_return); --打印結果  
    end;  

執行存儲過程 1除以0 結果:

 


免責聲明!

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



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