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

如何在Oracle存储过程的MERGE语句中插入子查询返回值

Oracle 存储过程MERGE语句问题修正方案
  • 插入字段与值数量不匹配:INSERT子句仅声明了5个目标字段,VALUES中包含了子查询返回的SK_FECHA共6个值,需要在INSERT字段列表中补充SK_FECHA字段
  • 日期函数不符合Oracle语法:Oracle没有内置MONTH()、YEAR()函数,需要替换为EXTRACT(MONTH FROM 日期字段)或者TO_NUMBER(TO_CHAR(日期字段,'MM'))的写法提取年月
  • 语法符号错误:VALUES子句的括号未闭合就使用了分号,打断了MERGE语句的完整结构
  • 存储过程名称不匹配:开头定义的存储过程名为P_FORMULARIO,结尾END后标记的名称为P_EQUIPAMIENTO,名称不一致会触发编译错误
  • 可选校验:USING子查询中的EQUIPAMEINTO_ID字段存在拼写错误的可能,可对照ODS_FORMULARIO表的实际字段名确认调整

修正后完整代码

CREATE OR REPLACE PROCEDURE P_FORMULARIO
IS
BEGIN 
    MERGE INTO HT_FORMULARIO d
    USING
    (SELECT id, METODO_ID, TIPO_ID, DEPARTAMENTO_ID, EQUIPAMEINTO_ID, FECHAINICIO 
        FROM ODS_FORMULARIO) o
    ON  (d.ID_CAMPO = o.id)
    WHEN MATCHED THEN
        UPDATE SET d.SK_METODO_MUEST = o.METODO_ID,
        d.SK_TIPO_MUESTRA = o.TIPO_ID,
        d.SK_DEPARTAMENTO = o.DEPARTAMENTO_ID,
        d.SK_EQUIPAMIENTO = o.EQUIPAMEINTO_ID
    WHEN NOT MATCHED THEN
        INSERT (ID_CAMPO, SK_METODO_MUEST, SK_TIPO_MUESTRA, SK_DEPARTAMENTO, SK_EQUIPAMIENTO, SK_FECHA)
        VALUES (o.id, o.METODO_ID, o.TIPO_ID,o.DEPARTAMENTO_ID, o.EQUIPAMEINTO_ID, 
            (SELECT SK_FECHA FROM dt_fecha WHERE mes = EXTRACT(MONTH FROM o.FECHAINICIO) AND anio = EXTRACT(YEAR FROM o.FECHAINICIO)));
    COMMIT;
END P_FORMULARIO;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:36:00