Oracle 预定义异常及应用
Oracle 提供了一些预定义的异常,这些异常涵盖了常见的错误情况;同时提供了SQLERRM函数来获取当前会话中最近一次触发的异常信息。SQLERRM函数返回一个字符串,该字符串包含了最近抛出的异常的错误消息。另一个相关的函数是SQLCODE,它返回最近一次抛出的异常的错误代码。
-
ACCESS_INTO_NULL
- 含义: 当试图访问或分配尚未初始化的嵌套表或VARRAY变量时抛出此异常。
-
CASE_NOT_FOUND
- 含义: 当没有与CASE语句的选择值匹配的分支,并且没有指定ELSE部分时抛出此异常。
-
COLLECTION_IS_NULL
- 含义: 当对未初始化的嵌套表或VARRAY变量进行操作时抛出此异常。
-
CURSOR_ALREADY_OPEN
- 含义: 当试图打开一个已经打开的游标时抛出此异常。
-
DUP_VAL_ON_INDEX
- 含义: 当试图插入一个重复值到一个唯一索引列时抛出此异常。
-
INVALID_CURSOR
- 含义: 当对一个无效的游标进行操作(如关闭已经关闭的游标或从未打开的游标中获取数据)时抛出此异常。
-
INVALID_NUMBER
- 含义: 当在数值转换中发生错误时抛出此异常。例如,将非数值字符串转换为数字时会抛出此异常。
-
LOGIN_DENIED
- 含义: 当用户试图登录到Oracle数据库但被拒绝时抛出此异常。
-
NO_DATA_FOUND
- 含义: 当SELECT INTO语句没有返回任何行时抛出此异常。
-
NOT_LOGGED_ON
- 含义: 当用户试图执行需要连接到数据库的操作但未登录时抛出此异常。
-
PROGRAM_ERROR
- 含义: 当PL/SQL程序内部发生意外错误时抛出此异常。
-
ROWTYPE_MISMATCH
- 含义: 当查询返回的行与变量或记录类型不匹配时抛出此异常。
-
SELF_IS_NULL
- 含义: 当试图访问未初始化的对象类型的成员时抛出此异常。
-
STORAGE_ERROR
- 含义: 当PL/SQL程序运行时发生存储分配错误时抛出此异常。
-
SUBSCRIPT_BEYOND_COUNT
- 含义: 当对集合(嵌套表或VARRAY)的子脚本超出实际元素个数时抛出此异常。
-
SUBSCRIPT_OUTSIDE_LIMIT
- 含义: 当对集合的子脚本超出允许范围时抛出此异常。
-
SYS_INVALID_ROWID
- 含义: 当提供的ROWID无效时抛出此异常。
-
TIMEOUT_ON_RESOURCE
- 含义: 当资源分配操作超时时抛出此异常。
-
TOO_MANY_ROWS
- 含义: 当SELECT INTO语句返回多于一行时抛出此异常。
-
VALUE_ERROR
- 含义: 当值类型不匹配或无法完成类型转换时抛出此异常。
-
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;
详细解释
- NO_DATA_FOUND:
- 当查询没有返回任何行时触发此异常。
- 使用SQLCODE获取错误代码,使用SQLERRM获取错误信息。
- TOO_MANY_ROWS:
- 当查询返回多于一行时触发此异常。
- 同样使用SQLCODE和SQLERRM获取相关的错误代码和信息。
- VALUE_ERROR:
- 当值类型不匹配或无法完成类型转换时触发此异常。
- 使用SQLCODE和SQLERRM获取错误代码和信息。
- OTHERS:
- 捕获所有其他未处理的异常。
- 返回错误代码和错误信息,以便进行进一步分析。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现