oracle异常Exception:oracle16(跟着宝哥学java:oracle系列:全网最全):异常exception、oracle自定义异常

/*
异常:程序运行出现非正常清空
     在plsql块中,正常代码出现异常 将终止执行正常代码  而是跳转到exception对应的代码
     
oracle中常见的异常:
    ACCESS_INTO_NULL 
    未定义对象 

    CASE_NOT_FOUND 
    CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时 

    COLLECTION_IS_NULL 
    集合元素未初始化 

    CURSER_ALREADY_OPEN 
    游标已经打开 

    DUP_VAL_ON_INDEX 
    唯一索引对应的列上有重复的值 

    INVALID_CURSOR 
    在不合法的游标上进行操作 

    INVALID_NUMBER 
    内嵌的 SQL 语句不能将字符转换为数字 

    NO_DATA_FOUND 
    使用 select into 未返回行,或应用索引表未初始化的元素时 

    TOO_MANY_ROWS 
    执行 select into 时,结果集超过一行 

    ZERO_DIVIDE 
    除数为 0 

    SUBSCRIPT_BEYOND_COUNT 
    元素下标超过嵌套表或 VARRAY 的最大值 

    SUBSCRIPT_OUTSIDE_LIMIT 
    使用嵌套表或 VARRAY 时,将下标指定为负数 

    VALUE_ERROR 
    赋值时,变量长度不足以容纳实际数据 

    LOGIN_DENIED 
    PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码 

    NOT_LOGGED_ON 
    PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据 

    PROGRAM_ERROR 
    PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包 

    ROWTYPE_MISMATCH 
    宿主游标变量与 PL/SQL 游标变量的返回类型不兼容 

    SELF_IS_NULL 
    使用对象类型时,在 null 对象上调用对象方法 

    STORAGE_ERROR 
    运行 PL/SQL 时,超出内存空间 

    SYS_INVALID_ID 
    无效的 ROWID 字符串 

    TIMEOUT_ON_RESOURCE 
    Oracle 在等待资源时超时   

*/
select * from stuinfo;
declare
  a int;
  b varchar(3);
  c int; 
begin
  insert into stuinfo(sno,sname,sbirth) values(11,'呵呵呵',sysdate);
  select sage into c from stuinfo where sno=202020;
  select sage into c from stuinfo;
  b:='123456';
  a:=1/0;
  exception
      when DUP_VAL_ON_INDEX then
           dbms_output.put_line('捕获到异常::DUP_VAL_ON_INDEX  违反唯一约束');
      when NO_DATA_FOUND then
           dbms_output.put_line('捕获到异常::NO_DATA_FOUND  没有找到对应的数据');
      when TOO_MANY_ROWS then
           dbms_output.put_line('捕获到异常::TOO_MANY_ROWS  只要一个 但获取多个');
      when VALUE_ERROR then
           dbms_output.put_line('捕获到异常::VALUE_ERROR  变量精度太低');
      when ZERO_DIVIDE then
           dbms_output.put_line('捕获到异常::ZERO_DIVIDE  被0除');
      when others then
           dbms_output.put_line('捕获到异常::when others then');
end;

-- 自定义异常类型
declare
    age int:='&请输入年龄:';
    MY_AGE_EXCEPTION exception;  /*自定义异常*/
begin
    /*指定出现自定义异常的条件*/
    if age<=0 or age >120 then
         raise  MY_AGE_EXCEPTION; /*产生异常情况*/
    end if;
    dbms_output.put_line('age='||age);
    exception
    when MY_AGE_EXCEPTION then
             dbms_output.put_line('出现异常:MY_AGE_EXCEPTION:年龄范围出错!');
             RAISE_APPLICATION_ERROR(-20001,'年龄范围出错:必须是[0,120]');/*通过弹出框 显示异常编号和异常原因*/
    when others then
             dbms_output.put_line('出现异常:出现其他异常!');
end;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值