我必须在表target_table中插入/更新一些RECORDS。这些记录来自一个source_table。
我在target_table中使用MERGE进行更新/插入。查询如下
MERGE
INTO target_table tgt
USING source_table src
ON ( src.column1 = tgt.column1 and
src.column2 = tgt.column2)
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
tgt.column2,
tgt.column3,
tgt.column4 )
VALUES ( src.coulmn1,
src.coulmn2,
src.coulmn3,
src.coulmn4);
我想在更新时添加一些特定条件。
IF target_table.column3 in (val1','val2)
然后只有更新,否则没有更新或插入。
答案 0 :(得分:24)
您只需将WHERE
子句添加到UPDATE
即可。 More about it in oracle docs.
所以在你的情况下它应该是:
...
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHERE tgt.column3 IN (val1, val2)
WHEN NOT MATCHED
...
答案 1 :(得分:2)
您可以通过pinal Dava将此文章用于您的问题
答案 2 :(得分:0)
请尝试按以下步骤操作:
MERGE
INTO target_table tgt
USING source_table src
ON (src.column1 = tgt.column1)
WHEN MATCHED
THEN
UPDATE
SET tgt.column3= src.column3,
tgt.column4 = src.coulmn4
WHERE src.column1 = tgt.column1 and
src.column2 = tgt.column2
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
tgt.column2,
tgt.column3,
tgt.column4 )
VALUES ( src.coulmn1,
src.coulmn2,
src.coulmn3,
src.coulmn4);