Oracle存储过程的异常处理
1、为了提高存储过程的健壮性,避免运行错误,当建立存储过程时应包含异常处理部分。 2、异常(EXCEPTION)是一种PL/SQL标识符,包括预定义异常、非预定义异常和自定义异常; 3、预定义异常是指由PL/SQL提供的系统异常;非预定义异常用于处理与预定义异常无关的Oracle错误(如完整性约束等);自定义异常用于处理与Oracle错误的其他异常情况。 4、RAISE_APPLICATION_ERROR用于自定义错误消息,并且消息号必须在-20000~-20999之间 ? ? ? ? ? ? ? ? ? 命名的系统异常 ? ?产生原因? access_into_null ? 未定义对象? case_not_found ? ?case中若未包含相应的when,并且没有设置? 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 ? ?pl/sql 应用程序连接到 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 在等待资源时超时 ? ? ? ? ? ? ? ? ? ? ? ? --自定义异常处理 CREATE OR REPLACE PROCEDURE stu_proc ( --多个用逗号隔开 ? v_id IN NUMBER ) IS --多个用分号隔开 ? v_max_id NUMBER; ? v_name VARCHAR2(20); ? v_raise EXCEPTION;? BEGIN SELECT MAX(a.id) INTO v_max_id FROM student a; IF v_id>v_max_id THEN ? ? RAISE v_raise; END IF; SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id; ? dbms_output.put_line(‘学生名称为:‘||v_name); EXCEPTION WHEN v_raise THEN? ? ? RAISE_APPLICATION_ERROR(-20010,‘v_id not exists!‘); WHEN NO_DATA_FOUND THEN? ? ? RAISE_APPLICATION_ERROR(-20011,‘ERROR:不存在!‘); END stu_proc; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |