oracle程序块异常处理

异常处理块:错误发生是要进行执行和处理的代码

语法:

begin
...
--注意exception放在bgin和end代码块的最后一部分,紧接着end
exception  --exception和begin,end同级
	when except_name1 then
	...
	when except_name2 then
	...
end;

常见的异常处理:

  1. 预定义异常:

    运行系统产生的,例如:ZERO_DIVIDE(除以0)异常

    常见的预定义异常:

    1. NO_DATA_FOUND:查询时未找到数据
    2. DUP_VAL_ON_INDEX:视图破坏唯一性约束
    3. VALUE_ERROR:转换类型错误
    4. TOO_MANY_ROWS:select into返回多行

    其它:
    在这里插入图片描述

    declare
      x number;
    begin
      x:='aaa';
    exception 
      when VALUE_ERROR then
        dbms_output.put_line('类型转换错误');
    end;
    
  2. 自定义异常:

    调用异常处理的时候需要使用raise语句。

    --用户自定义异常
    declare
      vage Student.Sage%type;
      over_child exception;
    begin
      select sage into vage from Student where sno='001';
      if vage>12 then
        raise over_child;   --发起一个异常
      end if;
    exception when over_child then
      dbms_output.put_line('该同学已不是少年');
    end;
    
  3. 嵌套程序捕获异常

    --嵌套程序中捕获异常
    declare
      vsname Student.sname%type;
      vssex Student.Ssex%type;
      vsno SC.sno%type;
    begin
      --嵌套程序一
      begin
        select sname into vsname from Student where sno='000';
      exception when no_data_found then
        dbms_output.put_line('没有数据');
      end;
      --嵌套程序二
      begin
        select sno into vsno from SC where sno='001';
      exception when too_many_rows then
        dbms_output.put_line('返回太多行');
      end;
      --嵌套程序三
      begin
        insert into Student(sno,sname,ssex,sage,sdept) values('001','hhh','f',1,'CS');
      exception when dup_val_on_index then
        dbms_output.put_line('违背唯一性错误');
      end;
      --嵌套程序四
      begin
        vssex:='美女';
      exception when value_error then
        dbms_output.put_line('类型转换错误');
      end;
    end;
    

    嵌套程序捕获异常和一般的捕获异常区别:

    一般的捕获异常,捕获到一个异常之后就不会执行后面的程序。而嵌套程序捕获异常,每个程序是互不影响的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值