Oracle中异常处理方法

  在写存储过程中,有时候需要返回出错的原因,以方便查看记录。

  Oracle提供了以下异常:

  1.预定义异常:用于处理常见的Oracle错误。

  2.非预定义异常:用于处理预定义异常所不能处理的Oracle错误。

  3.自定义异常:用于处理Oracle错误无关的其它情况。

  异常处理以关键字Exception开始,语法如下:

  EXCEPTION
      WHEN  exception_Name THEN  --exception_Name为异常的名字
         statement1;

   WHEN OTHERS THEN
      statement1;

 常见系统异常参考表:

命名的系统异常         产生原因 
 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          应用程序连接到 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 在等待资源时超时 

示例:

DECLARE
    e_integrity EXCEPTION;  --1、定义部分
    PRAGMA EXCEPTION_INIT (e_integrity, -2291);  --2、建立关联关系
BEGIN
    Update  emp Set deptno=  :dno Where  empno= :eno;
EXCEPTION
    WHEN  e_integrity THEN  --3、捕捉处理
      DBMS_OUTPUT.PUT_LINE(该部门不存在);
END;


原文地址:https://www.cnblogs.com/ZHF/p/1863632.html