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






  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值