码迷,mamicode.com
首页 > 数据库 > 详细

oracle存储过程异常捕获

时间:2018-05-18 15:46:10      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:sqlplus   SQ   out   varchar   变量   col   cep   begin   lag   

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存储过程异常捕获

标签:sqlplus   SQ   out   varchar   变量   col   cep   begin   lag   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!