2016-01-13 58 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);