• 04-异常处理机制



      1 --[预定义异常]
      2 declare
      3 
      4   v_sal employees.salary%type;
      5 begin
      6   select salary into v_sal
      7   from employees
      8   where employee_id >100;
      9   
     10   dbms_output.put_line(v_sal);
     11 
     12 exception
     13   when Too_many_rows then dbms_output.put_line('输出的行数太多了');
     14 end;
     15 
     16 --[非预定义异常]
     17 declare
     18 
     19   v_sal employees.salary%type;
     20   --声明一个异常
     21   delete_mgr_excep exception;
     22   --把自定义的异常和oracle的错误关联起来
     23   PRAGMA EXCEPTION_INIT(delete_mgr_excep,-2292);
     24 begin
     25   delete from employees
     26   where employee_id = 100;
     27   
     28   select salary into v_sal
     29   from employees
     30   where employee_id >100;
     31   
     32   dbms_output.put_line(v_sal);
     33 
     34 exception
     35   when Too_many_rows then dbms_output.put_line('输出的行数太多了');
     36   when delete_mgr_excep then dbms_output.put_line('Manager不能直接被删除');
     37 end;
     38 
     39 --[用户自定义异常]
     40 declare
     41 
     42   v_sal employees.salary%type;
     43   --声明一个异常
     44   delete_mgr_excep exception;
     45   --把自定义的异常和oracle的错误关联起来
     46   PRAGMA EXCEPTION_INIT(delete_mgr_excep,-2292);
     47   
     48   --声明一个异常
     49   too_high_sal exception;
     50 begin
     51 
     52   select salary into v_sal
     53   from employees
     54   where employee_id =100;
     55   
     56   if v_sal > 1000 then
     57      raise too_high_sal;
     58   end if;
     59      
     60   delete from employees
     61   where employee_id = 100;
     62 
     63   dbms_output.put_line(v_sal);
     64 
     65 exception
     66   when Too_many_rows then dbms_output.put_line('输出的行数太多了');
     67   when delete_mgr_excep then dbms_output.put_line('Manager不能直接被删除');
     68   --处理异常
     69   when too_high_sal then dbms_output.put_line('工资过高了');
     70 end;
     71 
     72 --18. 异常的基本程序: 
     73 通过 select ... into ... 查询某人的工资, 若没有查询到, 则输出 "未找到数据"
     74 
     75 declare
     76   --定义一个变量
     77   v_sal employees.salary%type;
     78 begin
     79   --使用 select ... into ... 为 v_sal 赋值
     80   select salary into v_sal from employees where employee_id = 1000;
     81   dbms_output.put_line('salary: ' || v_sal);
     82 exception
     83   when No_data_found then 
     84        dbms_output.put_line('未找到数据');
     85 end;
     86 
     87  88 
     89 declare
     90   --定义一个变量
     91   v_sal employees.salary%type;
     92 begin
     93   --使用 select ... into ... 为 v_sal 赋值
     94   select salary into v_sal from employees;
     95   dbms_output.put_line('salary: ' || v_sal);
     96 exception
     97   when No_data_found then 
     98        dbms_output.put_line('未找到数据!');
     99   when Too_many_rows then 
    100        dbms_output.put_line('数据过多!');     
    101 end;
    102 
    103 --19. 更新指定员工工资,如工资小于300,则加100;对NO_DATA_FOUND 异常, TOO_MANY_ROWS 进行处理.
    104 declare
    105    v_sal employees.salary%type;
    106 begin
    107    select salary into v_sal from employees where employee_id = 100;
    108    
    109    if(v_sal < 300) then update employees set salary = salary + 100 where employee_id = 100;
    110    else dbms_output.put_line('工资大于300');
    111    end if;
    112 exception
    113    when no_data_found then dbms_output.put_line('未找到数据');
    114     when too_many_rows then dbms_output.put_line('输出的数据行太多');
    115 end;
    116 
    117 --20. 处理非预定义的异常处理: "违反完整约束条件"
    118 
    119 declare
    120   --1. 定义异常    
    121   temp_exception exception;
    122 
    123   --2. 将其定义好的异常情况,与标准的 ORACLE 错误联系起来,使用 EXCEPTION_INIT 语句
    124   PRAGMA EXCEPTION_INIT(temp_exception, -2292);
    125 begin
    126   delete from employees where employee_id = 100;
    127 
    128 exception
    129   --3. 处理异常
    130   when temp_exception then
    131        dbms_output.put_line('违反完整性约束!');
    132 end;
    133 
    134 --21. 自定义异常: 更新指定员工工资,增加100;若该员工不存在则抛出用户自定义异常: no_result
    135 
    136 declare
    137   --自定义异常                                   
    138   no_result exception;   
    139 begin
    140   update employees set salary = salary + 100 where employee_id = 1001;
    141 
    142   --使用隐式游标, 抛出自定义异常
    143   if sql%notfound then
    144      raise no_result;
    145   end if;  
    146 
    147 exception
    148 
    149   --处理程序抛出的异常
    150   when no_result then
    151      dbms_output.put_line('更新失败');
    152 end;

  • 相关阅读:
    jdk动态代理底层实现
    SpringMvc执行流程及底层代码流程
    JavaWeb02-JSP数据交互
    JavaWeb01-动态网页
    异常总结
    优雅代码
    flask 脚本迁移语句
    git 拉取分支合并master&&回滚
    创建型设计模式
    基于mybatis的一个分表插件
  • 原文地址:https://www.cnblogs.com/shici/p/14406610.html
Copyright © 2020-2023  润新知