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

Oracle编写插入记录并返回SYS_GUID()主键的存储过程咨询

解决方案

核心使用Oracle内置的INSERT ... RETURNING INTO语法,该语法可以在执行插入操作的同时,直接将当前插入行自动生成的主键值返回到变量中,属于原子操作,完全不受并发插入影响,不会误获取其他会话生成的ID,完美适配SYS_GUID()默认值生成主键的场景。

完整存储过程代码

CREATE OR REPLACE PROCEDURE INSERT_ERROR_WITH_RELATION(
    P_SERVICE_CALL_ID IN RAW DEFAULT NULL,
    P_ERROR_TEXT IN CLOB
) AS
    -- 定义变量存储当前插入行生成的ERROR_LOG_ID
    V_ERROR_LOG_ID VARCHAR2(50);
BEGIN
    -- 插入错误日志,同时返回自动生成的主键到变量
    INSERT INTO ERROR_LOGS (
        ERROR_TIMESTAMP,
        ERROR_TEXT
    ) VALUES (
        CURRENT_TIMESTAMP,
        P_ERROR_TEXT
    ) RETURNING ERROR_LOG_ID INTO V_ERROR_LOG_ID;

    -- 入参SERVICE_CALL_ID非空时写入关联表
    IF P_SERVICE_CALL_ID IS NOT NULL THEN
        INSERT INTO SERVICE_CALL_ERROR_LOG_RELATION (
            SERVICE_CALL_ID,
            ERROR_LOG_ID
        ) VALUES (
            P_SERVICE_CALL_ID,
            V_ERROR_LOG_ID
        );
    END IF;

    -- 事务控制提示:如果上层应用有统一事务管理,请删除下方注释的COMMIT/ROLLBACK,由上层控制事务边界
    -- COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        -- ROLLBACK;
        RAISE; -- 抛出异常给上层业务逻辑处理
END INSERT_ERROR_WITH_RELATION;
/

核心特性说明

  • RETURNING子句直接绑定当前会话插入行生成的ERROR_LOG_ID,即使存在毫秒级高频并发插入,也不会拿到其他会话生成的ID,不存在数据串用风险
  • 完全保留原有表的DEFAULT SYS_GUID()主键生成逻辑,不需要提前手动生成主键
  • 天然适配需求中的两种分支逻辑,无多余性能开销

内容的提问来源于stack exchange,提问作者Wickerbough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:06:02