Oracle 预定义异常及应用

Oracle 提供了一些预定义的异常,这些异常涵盖了常见的错误情况;同时提供了SQLERRM函数来获取当前会话中最近一次触发的异常信息。SQLERRM函数返回一个字符串,该字符串包含了最近抛出的异常的错误消息。另一个相关的函数是SQLCODE,它返回最近一次抛出的异常的错误代码。

  1. ACCESS_INTO_NULL

    • 含义: 当试图访问或分配尚未初始化的嵌套表或VARRAY变量时抛出此异常。
  2. CASE_NOT_FOUND

    • 含义: 当没有与CASE语句的选择值匹配的分支,并且没有指定ELSE部分时抛出此异常。
  3. COLLECTION_IS_NULL

    • 含义: 当对未初始化的嵌套表或VARRAY变量进行操作时抛出此异常。
  4. CURSOR_ALREADY_OPEN

    • 含义: 当试图打开一个已经打开的游标时抛出此异常。
  5. DUP_VAL_ON_INDEX

    • 含义: 当试图插入一个重复值到一个唯一索引列时抛出此异常。
  6. INVALID_CURSOR

    • 含义: 当对一个无效的游标进行操作(如关闭已经关闭的游标或从未打开的游标中获取数据)时抛出此异常。
  7. INVALID_NUMBER

    • 含义: 当在数值转换中发生错误时抛出此异常。例如,将非数值字符串转换为数字时会抛出此异常。
  8. LOGIN_DENIED

    • 含义: 当用户试图登录到Oracle数据库但被拒绝时抛出此异常。
  9. NO_DATA_FOUND

    • 含义: 当SELECT INTO语句没有返回任何行时抛出此异常。
  10. NOT_LOGGED_ON

    • 含义: 当用户试图执行需要连接到数据库的操作但未登录时抛出此异常。
  11. PROGRAM_ERROR

    • 含义: 当PL/SQL程序内部发生意外错误时抛出此异常。
  12. ROWTYPE_MISMATCH

    • 含义: 当查询返回的行与变量或记录类型不匹配时抛出此异常。
  13. SELF_IS_NULL

    • 含义: 当试图访问未初始化的对象类型的成员时抛出此异常。
  14. STORAGE_ERROR

    • 含义: 当PL/SQL程序运行时发生存储分配错误时抛出此异常。
  15. SUBSCRIPT_BEYOND_COUNT

    • 含义: 当对集合(嵌套表或VARRAY)的子脚本超出实际元素个数时抛出此异常。
  16. SUBSCRIPT_OUTSIDE_LIMIT

    • 含义: 当对集合的子脚本超出允许范围时抛出此异常。
  17. SYS_INVALID_ROWID

    • 含义: 当提供的ROWID无效时抛出此异常。
  18. TIMEOUT_ON_RESOURCE

    • 含义: 当资源分配操作超时时抛出此异常。
  19. TOO_MANY_ROWS

    • 含义: 当SELECT INTO语句返回多于一行时抛出此异常。
  20. VALUE_ERROR

    • 含义: 当值类型不匹配或无法完成类型转换时抛出此异常。
  21. ZERO_DIVIDE

    • 含义: 当试图除以零时抛出此异常。

示例

处理预定义异常的示例函数:

CREATE OR REPLACE FUNCTION example_function(p_emp_id IN NUMBER) RETURN VARCHAR2 IS
   v_emp_name VARCHAR2(100);
BEGIN
   SELECT first_name || ' ' || last_name INTO v_emp_name
   FROM employees
   WHERE employee_id = p_emp_id;

   RETURN v_emp_name;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      RETURN '没有找到该员工。错误代码:' || SQLCODE || ' 错误信息:' || SQLERRM;
   WHEN TOO_MANY_ROWS THEN
      RETURN '找到多个员工。错误代码:' || SQLCODE || ' 错误信息:' || SQLERRM;
   WHEN VALUE_ERROR THEN
      RETURN '值错误。错误代码:' || SQLCODE || ' 错误信息:' || SQLERRM;
   WHEN OTHERS THEN
      RETURN '发生了其他错误。错误代码:' || SQLCODE || ' 错误信息:' || SQLERRM;
END;

详细解释

  1. NO_DATA_FOUND:
  • 当查询没有返回任何行时触发此异常。
  • 使用SQLCODE获取错误代码,使用SQLERRM获取错误信息。
  1. TOO_MANY_ROWS:
  • 当查询返回多于一行时触发此异常。
  • 同样使用SQLCODE和SQLERRM获取相关的错误代码和信息。
  1. VALUE_ERROR:
  • 当值类型不匹配或无法完成类型转换时触发此异常。
  • 使用SQLCODE和SQLERRM获取错误代码和信息。
  1. OTHERS:
  • 捕获所有其他未处理的异常。
  • 返回错误代码和错误信息,以便进行进一步分析。
posted @ 2024-06-25 16:25  qiao39gs  阅读(8)  评论(0编辑  收藏  举报