oracle存储过程异常捕获

Posted 薛文博

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 结果:

 

以上是关于oracle存储过程异常捕获的主要内容,如果未能解决你的问题,请参考以下文章

oracle plsql 捕获异常和抛出异常

九、存储过程中异常的处理

Java异常处理机制

Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

Oracle存储过程记录异常

SQLServer异常捕获