2016-01-13 90 views
0

我試圖查看是否存在一個表中存在'IMPORTID',該表由兩列組成:'IMPORTID','STEP'。如果存在,則將記錄的STEP列增加1.Oracle合併/插入

我剛剛使用硬編碼值進行了測試,表中當前沒有行。我期待以下SQL插入條目,但沒有任何事情發生。

MERGE into TOSTEP t 
USING 
    (SELECT 'Test' IMPORTID, 1 STEP FROM TOSTEP) s 
ON 
    (s.IMPORTID = t.IMPORTID) 
WHEN MATCHED THEN 
    update set t.STEP = s.STEP +1 
WHEN NOT MATCHED THEN 
    insert (IMPORTID,STEP) 
    values ('Test',1); 

回答

3

您正在合併一個空表與自己..意味着沒有在using子句中選擇的數據。更改(SELECT 'Test' IMPORTID, 1 STEP FROM TOSTEP) s(SELECT 'Test' IMPORTID, 1 STEP FROM DUAL) s,它應該工作

全碼:

MERGE into TOSTEP t 
USING 
    (SELECT 'Test' IMPORTID, 1 STEP FROM DUAL) s 
ON 
    (s.IMPORTID = t.IMPORTID) 
WHEN MATCHED THEN 
    update set t.STEP = s.STEP +1 
WHEN NOT MATCHED THEN 
    insert (IMPORTID,STEP) 
    values (s.IMPORTID, s.STEP);