zoukankan      html  css  js  c++  java
  • Oracle--异常处理

    Oracle 的异常分类:

    1. 预编译异常: 

        Oracle 可以直接捕获异常, 并且给这个异常取了异常

    /*
    异常名
    NO_DATA_FOUND           语句无返回数据        V
    TOO_MANY_ROWS           在执行select into 语句时返回多行时出现   V
    LOGIN_DENIED            使用无效的用户名和口令登录Oracle
    INVALID_NUMBER          试图将一个非有效的字符串转换成数字  
    DUP_VAL_ON_INDEX        重复的值存储在使用唯一索引的列中( 违反主键约束,唯一约束抛的异常)
    ACCESS_INTO_NULL        试图给一个没有初始化的对象赋值
    ZERO_DIVIDE             除以0
    VALUE_ERROR             算术或转换错误
    TIMEOUT_ON_RESOURCE     在等待资源时发生超时
    */

    例:

    --预编译的异常, oracle捕获到这个异常,  编码的时候,只需要进行异常处理
    declare 
       v_empno emp.empno%type  :='&请输入员工编号'; 
       v_name  emp.ename%type;
    
    begin
       select ename  into v_name from emp where empno = v_empno;
       dbms_output.put_line(v_name);
       exception    --异常处理
         -- when 异常名 then  
         --   处理异常的代码
         when NO_DATA_FOUND then
            dbms_output.put_line('查无此人!!');    
         when TOO_MANY_ROWS then
           dbms_output.put_line('数据台多!!!');   
         when others then
           dbms_output.put_line('未知错误');   
    end;

    2.非预定义异常:

        Oracle 会捕获这个异常(这个异常有一个异常错误代码), 但是Oracle 没有这个异常取名

    --SQL 错误: ORA-02291: 违反完整约束条件
    --  Oracle 异常:  错误代码: -2291     异常名,  异常信息
    --处理方案:  
    --  给这个异常绑定一个名字(异常变量名)     
    -- 步骤:  变量名 数据类型
    --    1. 声明一个异常类型的变量      异常变量名  exception;
    --    2. 把异常错误代码与异常变量名绑定在一起,  Oracle 抛出异常代码:-2291,  找到自定义的异常变量名
    --           给指定错误代码的异常取一个名字   PRAGMA  EXCEPTION_INIT(自定义异常名,异常代码);
    --    3. 在exception中,when  异常变量名 then 处理异常

    例:

    declare
        --1.声明一个异常类型的变量
        FK_EXCEPTION  exception;
        --2.把异常变量绑定一个错误代码
        PRAGMA  EXCEPTION_INIT(FK_EXCEPTION,-2291);
    begin
        insert into  emp_back3 values(1002,'JACK','SALESMAN','7902','1990-01-01',1500,300,50);
        --3处理异常
         exception
            when FK_EXCEPTION then
              dbms_output.put_line('添加失败,没有该部门!!');
            when others  then
              dbms_output.put_line('未知错误');
    end;

    3.自定义异常:

        Oracle不会捕获这个异常(把这个当成一个错误, 逻辑错误), 也没有异常名

    --   人为的创建一个异常, 根据需求来
    /*
       1.申明一个异常,  异常名  exception;
       2.在指定的地方抛出这个异常   RAISE  异常名; 人为的抛出这个异常,类似  throw  异常对象;
       3.捕获这个异常,然后进行处理     在exception中,when  异常变量名 then 处理异常
    */

    例:

    --自定义一个 奖金为null的异常
    declare
        --1. 声明一个异常
        my_exception  exception;
        v_comm emp.comm%type;
        v_empno emp.empno%type := '&请输入员工编号';
    begin
      select  comm into v_comm from emp where empno = v_empno;
      if v_comm is null then
        --2.抛出异常
        RAISE my_exception;   --抛出异常
      else
         dbms_output.put_line('哥们你的奖金:'||v_comm);
      end  if;
      --3.处理异常
      exception 
        when my_exception then
           dbms_output.put_line('奖金为空,赶快去找老板要!!');
    end;
  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/64Byte/p/12709383.html
Copyright © 2011-2022 走看看