Oracle Merge / Insert

时间:2016-01-13 10:44:37

标签: sql oracle oracle11g

我正在尝试查看包含两列的表中是否存在'IMPORTID':'IMPORTID','STEP'。如果有,则将记录的STEP列增加1。

我刚刚使用硬编码值进行了测试,目前表中没有行。我期待以下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);

1 个答案:

答案 0 :(得分: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);