You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:18:21