Oracle异常处理举例

--异常处理

--预定义异常
--实验no-data-found异常
--EXCEPTION,放在执行块的最下面
  --WHEN 异常信息 THEN
    --发生该异常的处理代码;
    --WHEN 异常信息 THEN
    --发生该异常的处理代码;
  --WHEN OTHERS THEN  概括了除以上异常列表外的所有异常
    --dbms_output.put_line('发生未知异常');
    
DECLARE
  rec_emp emp%ROWTYPE;
BEGIN
  SELECT * INTO rec_emp FROM emp WHERE empno = 123;
  dbms_output.put_line('end');

EXCEPTION
  WHEN no_data_found THEN
    dbms_output.put_line('找不到数据');
  WHEN OTHERS THEN
    dbms_output.put_line('发生未知异常');
END;

--非预定义异常的处理
--获取异常的代码  12/0这个异常的代码 -1476
--定义一个异常,将这个异常与异常代码联系起来。
--像处理预定义异常一样,处理它
--获取异常代码:sqlcode变量,获取异常信息:sqlerrm变量
DECLARE
  num NUMBER;
  excp_zero EXCEPTION;
  PRAGMA EXCEPTION_INIT(excp_zero, -1476);
BEGIN
  SELECT 12 / 0 INTO num FROM dual;
  dbms_output.put_line(num);
EXCEPTION
  WHEN excp_zero THEN
    dbms_output.put_line('不能除以0');
END;

--自定义异常:处理一些本来没有错,但是不符合具体环境的情况
DECLARE
  num NUMBER;
  excp_sal EXCEPTION;
BEGIN
  num := &sal;
  IF (num <= 0) THEN
    RAISE excp_sal;
  END IF;
  UPDATE emp SET sal = sal + num;

EXCEPTION
  WHEN excp_sal THEN
    dbms_output.put_line('扣工资是不好的行为');
END;

--另一种自定义异常的方式
--定义异常的代码,信息
--自定义的异常代码范围(20000-20999)
DECLARE
  num NUMBER;
 
BEGIN
  num := &sal;
  IF (num <= 0) THEN
    RAISE_application_error(-20000,'工资涨幅太低');
  END IF;
  UPDATE emp SET sal = sal + num;

EXCEPTION
  WHEN others THEN
    dbms_output.put_line(sqlerrm);
END;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值