• 异常抛出问题


    错误处理机制

    Oacle中对运行时错误的处理采用了异常处理机制。

    一个错误对应一个异常,当错误产生时抛出相应的异常,并被异常处理器捕获,

    程序控制权传递给异常处理器,由异常处理器来处理运行时错误。

    异常的类型

    • 预定义的Oracle异常( Oracle错误)
    • 非预定义的Oracle异常( Oracle错误)
    • 用户定义的异常(用户定义错误)

      预定义的Oracle异常

    异常情况名          错误代码     描述

    CURSOR_ALREADY_OPEN     ORA-06511     尝试打开已经打开的游标

    INVALID_CURSOR            ORA-01001     不合法的游标操作(如要打开已经关闭的游标) 

    NO_DATA_FOUND       ORA-01403     没有发现数据 

    TOO_MANY_ROWS     ORA-01422     一个SELECT  INTO语句匹配多个数据行

    INVALID_NUMBER     ORA-01722     转换成数字失败 (‘X’) 

    VALUE_ERROR       ORA-06502     截断、算法或转换错误,通常出现在赋值错误 

    ZERO_DIVIDE       ORA-01476     除数为0

    ROWTYPE_MISMATCH      ORA-06504    主机游标变量与PL/SQL游标变量类型不匹配

    DUP_VAL_ON_INDEX       ORA-00001     违反唯一性约束或主键约束

    SYS_INVALID_ROWID       ORA-01410     转换成ROWID失败

    TIMEOUT_ON_RESOURCE     ORA-00051    在等待资源中出现超时

    LOGIN_DENIED       ORA-01017      无效用户名/密码

    CASE_NOT_FOUND     ORA-06592     没有匹配的WHEN子句

    NOT_LOGGED_ON     ORA-01012     没有与数据库建立连接

    STORAGE_ERROR     ORA-06500     PL/SQL内部错误

    PROGRAM_ERROR        ORA-06501     PL/SQL内部错误

    ACCESS_INTO_NULL       ORA-06530     给空对象属性赋值

    COLLECTION_IS_NULL     ORA-06531     对某NULL PL/SQL表或可变数组试图应用集合方法,而不是EXISTS 

    SELF_IS_NULL       ORA-30625     调用空对象实例的方法

    SUBSCRIPT_BEYOND_COUNT   ORA-06533    对嵌套表或数组索引引用时超出集合中元素的数量

    SUBSCRIPT_OUTSIDE_LIMIT   ORA-06532     对嵌套表或可变数组索引的引用超出声明的范围

      非预定义异常

    有一些Oracle错误没有预定义异常与其关联,

    需要在语句块的声明部分声明一个异常名称,

    然后通过编译指示PRAGMA EXCEPTION_INIT将该异常名称与一个Oracle错误相关联。

    此后,当执行过程出现该错误时将自动抛出该异常。

    声明一个异常名称

    e_integrity EXCEPTION;

    将异常与一个Oracle错误号相绑定

    PRAGMA EXCEPTION-INIT(e_integrity,-2291)

    示例

    DECLARE

      e_deptno_fk EXCEPTION;

      PRAGMA EXCEPTION_INIT(e_deptno_fk,-2292);

    BEGIN

    ……

    EXCEPTION

    ……

    END;

      用户自定义的异常

    用户定义错误是指,有些操作并不会产生Oracle错误,但是从业务规则角度考虑,认为是一种错误。

    用户自定义异常必须在声明部分进行声明。

    当异常发生时,系统不能自动触发,需要用户使用RAISE语句。

    WHEN EXCEPTION_NAME THEN

    RAISE user_define_exception;

    在异常处理部分捕捉并处理异常。

    Oracle内部错误号用一个负的5位数表示,如-02292。其中

       -20999~-20000为用户定义错误的保留号

    异常的捕获

    EXCEPTION

    WHEN exception1[OR excetpion2…]THEN 

       sequence_of_statements1;

    WHEN exception3[OR exception4…]THEN 

       sequence_of_statements2;

    ……

    WHEN OTHERS THEN 

       sequence_of_statementsn;

    END;

    所有未处理的异常由OTHERS处理

  • 相关阅读:
    项目测试与部署
    使用技术及部分代码截选
    校园电子设备报修回收系统需求分析
    java lambda expression
    Domain logic approaches
    Spring AOP Capabilities ang goals
    CDI Features
    JAVA DESIGN PATTERN
    LDAP & Implementation
    spring ref &history&design philosophy
  • 原文地址:https://www.cnblogs.com/mobai95/p/12516763.html
Copyright © 2020-2023  润新知