浅析:oracle存储过程中的异常处理

本文详细介绍了在Oracle存储过程中如何实现异常处理,通过逐步分析和代码演示,阐述了如何确保程序在遇到错误时能够正确响应并提供反馈。特别强调了如何针对不同类型的错误进行区分处理,以及在常见业务场景中应用此方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为项目需要,要用到oracle的存储过程。由于处理的业务比较复杂,难免中间哪个环节出错,所以觉得必须得加下异常处理。以下是最初的一个例子:

STEP1

create or replace procedure TestPro  is
xh integer;
error_info exception;
begin
  //业务代码
  xh:=100;
  EXCEPTION
    WHEN error_info THEN  
  RAISE_APPLICATION_ERROR(-20010, '处理过程中出现错误');
  
end TestPro;

请大家不要见笑,以前真没用过ORACLE,用过ORALCE的人差不多一眼就能看到问题:异常处理不会执行。于是今天特意试了一下,怎么处理能行。

首先找到原因,没有触发"ERROR_INFO",接下来就拿它开刀:

STEP2

create or replace procedure TestPro  is
xh integer;
error_info exception;
begin
  //业务代码
  xh:=100;
  raise error_info;
  EXCEPTION
    WHEN error_info THEN  
  RAISE_APPLICATION_ERROR(-20010, '处理过程中出现错误');
end TestPro;
处理的还是有问题,黑猫白猫都逮着是不行的!于是有了下边的代码:

STEP3

create or replace procedure TestPro  is
xh integer;
error_info exception;
begin
  //业务代码
  xh:=100 
  if xh<>100 then
    raise error_info;
  end if;
EXCEPTION
    WHEN error_info THEN  
  RAISE_APPLICATION_ERROR(-20010, '处理过程中出现错误');
end TestPro;
以后对于业务中的处理可以采用这种方法,当每个条件不满足时可以以这种方式提示返回给调用者。真的是个不错的解决方法。

不过上面的代码貌似世界太平了,但是却是暗流涌动呀!如果有人这样:

xh:='aaaa'

又回到解放前了!而且这种错误用STEP2的代码是捕获不到的,因为你要处理前它已经发生了!但可以用这种方法:

create or replace procedure TestPro  is
xh integer;
error_info exception;
begin
  //业务代码
  xh:=100 
  if xh<>100 then
    raise error_info;
  end if;
EXCEPTION
  WHEN error_info THEN
    RAISE_APPLICATION_ERROR(-20009, '处理过程中出现错误');
  WHEN OTHERS THEN  
    RAISE_APPLICATION_ERROR(-20010, '系统意外错误');
end TestPro;

一个OTHERS就搞定了!但切记不能滥用,最好还是把已知的错误分出来!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值