2016-12-06 54 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