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;
  • 相关阅读:
    范仁义js课程---59、this
    javascript疑难问题---9、闭包执行问题
    jetbrains
    React-Native首次运行提示-ReferenceError-Can-t-find-variable-fbBatchedBridge
    visual studio 2015提示IE10未安装
    【转】在Windows下搭建React Native Android开发环境
    Android Studio 简单设置
    【转】Spring 4.x实现Restful web service
    SecureCRT 终端仿真程序 v7.0.0.326 中文绿色便携破解版
    《Spring技术内幕》学习笔记17——Spring HTTP调用器实现远程调用
  • 原文地址:https://www.cnblogs.com/64Byte/p/12709383.html
Copyright © 2011-2022 走看看