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

oracle存储过程异常捕获

 

相关文章:

  • 2021-11-20
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-23
猜你喜欢
  • 2022-02-28
  • 2021-05-18
  • 2021-06-29
  • 2022-12-23
  • 2021-09-14
  • 2021-07-28
相关资源
相似解决方案