2016-12-06 48 views
-2

我是Oracle的新手。
我在Oracle有一个表有4列Period,Open_Flag,Creation_Dt,Updated_By。 “期间”列是表的主键。
enter image description here
我已经创建了一个proc,它将检查表中输入参数的句点值,如果其存在,则必须更新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;
问题是,在这种情况下更新工作正常,但插入不起作用。
请帮忙。插入合并不在Oracle中工作

+2

请,文[不截图](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload -images-的代码上那么当-要价-A-问题/ 285557#285557)。说我想帮助你;如果您发布了一些文本,我可以轻松地复制代码,尝试编辑它;如果您发布图片,我只是投票结束该问题。 – Aleksej

+0

对不起@Aleksej ...我现在已经更新了这个问题。 – Meen

回答

0

您正在合并表与自身,按期间过滤。显然,它永远不会看到你自己不存在的价值。

试试这个行,而不是你的使用线:

using (select V_PERIOD "period" from dual)S