如何在PLSQL中创建带自定义异常处理的ADD_DEPT存储过程插入DEPT表数据
ADD_DEPT存储过程实现方案
以下是满足需求的可直接运行的PLSQL代码:
CREATE OR REPLACE PROCEDURE ADD_DEPT( p_deptno IN DEPT.DEPTNO%TYPE, p_dname IN DEPT.DNAME%TYPE, p_loc IN DEPT.LOC%TYPE ) IS -- 声明自定义异常,用于处理重复插入场景 e_duplicate_row EXCEPTION; -- 绑定Oracle内置唯一约束冲突错误码ORA-00001到自定义异常 PRAGMA EXCEPTION_INIT(e_duplicate_row, -1); BEGIN INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (p_deptno, p_dname, p_loc); DBMS_OUTPUT.PUT_LINE('部门记录插入成功,部门编号:' || p_deptno); EXCEPTION WHEN e_duplicate_row THEN -- 重复行场景的自定义处理逻辑 DBMS_OUTPUT.PUT_LINE('插入失败:部门编号' || p_deptno || '已存在,不允许重复插入'); ROLLBACK; WHEN OTHERS THEN -- 兜底异常处理,可按需调整 DBMS_OUTPUT.PUT_LINE('插入操作异常,错误信息:' || SQLERRM); ROLLBACK; END; /
关键逻辑说明
- 入参使用
%TYPE锚定DEPT表对应字段的数据类型,避免表结构字段类型调整后存储过程参数类型不匹配的问题,可维护性更高。 - 重复行场景本质是插入时触发DEPT表DEPTNO字段的主键/唯一键约束,对应Oracle错误码为
-1(即ORA-00001错误),通过PRAGMA EXCEPTION_INIT将该系统错误和自定义异常绑定后,就能精准捕获重复插入的场景,走自定义处理逻辑。 - 异常分支默认做了控制台提示和事务回滚,你可以根据实际业务需求替换为错误码返回、操作日志记录等逻辑。
调用示例
-- 正常插入测试 BEGIN ADD_DEPT(50, 'IT', 'BEIJING'); END; / -- 重复插入测试,会触发自定义异常提示 BEGIN ADD_DEPT(50, 'IT', 'BEIJING'); END; /
内容的提问来源于stack exchange,提问作者Ishika
相关产品推荐
相关产品推荐

