【问题标题】:Insert in Merge not working in Oracle插入合并在 Oracle 中不起作用
【发布时间】:2017-04-21 04:52:53
【问题描述】:

我是 Oracle 的新手。
我在 Oracle 中有一个表,它有 4 列 Period、Open_Flag、Creation_Dt、Updated_By。 Period 列是表的主键。

我已经创建了一个 proc,它将从表中的输入参数检查 period 的值,如果它存在,则必须更新 Open_flag 的值,否则应插入新记录。
create or replace PROCEDURE PROC_REF_SAP_PERIOD( V_PERIOD IN NUMBER,V_OPEN_FLAG IN VARCHAR2,V_CREATION_DT IN DATE,V_UPDATED_BY IN VARCHAR2) AS BEGIN MERGE INTO REF_SAP_PERIOD T USING (SELECT * FROM REF_SAP_PERIOD WHERE PERIOD=V_PERIOD )S ON (T.PERIOD=S.PERIOD ) WHEN MATCHED THEN UPDATE SET OPEN_FLAG = V_OPEN_FLAG --WHERE PERIOD=V_PERIOD AND CREATION_DT=V_CREATION_DT AND UPDATED_BY=V_UPDATED_BY WHEN NOT MATCHED THEN INSERT (PERIOD,OPEN_FLAG,CREATION_DT,UPDATED_BY) VALUES (V_PERIOD,V_OPEN_FLAG,V_CREATION_DT,V_UPDATED_BY); END;
问题是更新在这种情况下运行良好,但是插入不起作用。
请帮助。

【问题讨论】:

  • 请发短信not screenshots。说我想帮你;如果您发布了一些文本,我可以轻松复制代码,尝试编辑它;如果您发布图片,我只是投票结束问题。
  • 对不起@Aleksej ...我现在更新了问题。

标签: oracle merge upsert


【解决方案1】:

您正在合并表格,按句点过滤。显然,它本身永远不会看到你不存在的价值观。

试试这一行而不是你的 USING 行:

using (select V_PERIOD "period" from dual)S

【讨论】:

  • 谢谢@Alexander,你拯救了我的一天。非常感谢。
猜你喜欢
  • 2018-11-09
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2014-09-23
相关资源
最近更新 更多