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 结果:

原文地址:https://www.cnblogs.com/xwb583312435/p/9055963.html