我需要在目标表中输入条目,但在两种不同的场景中
我选择了“合并”来做到这一点
MERGE INTO target tar
USING (SELECT DISTINCT A.col1,B.col1,A.col2
FROM target A JOIN src B
ON A.col1=B.col1 AND B.col2 =A.col2
) src
ON (src.col1=tar.col1 and src.col2=tar.col2 )
WHEN MATCHED THEN
UPDATE SET tar.col4 =37,
tar.col5=6,
tar.col6=SYSDATE,
tar.col7=123,
tar.col8=SYSDATE,
tar.col9=123
WHEN NOT MATCHED THEN
INSERT (tar.col1,tar.col2,tar.col3,tar.col4)
values( src.col1,src.col2,37,6,);
我在“使用”中使用的选择查询的问题是获取空结果 我的期望是这是“不匹配”条件,它应该导致插入记录
但这不是合并 如果在“使用”条件下得出空结果,oracle Merge 会不起作用吗?
但这不是合并
当查询有语法错误时它将不起作用:
SELECT DISTINCT A.col1,B.col1,A.col2
FROM target A JOIN src B
ON A.col1=B.col1 AND B.col2 =A.col2
选择了两个 col1
列。既然您测试了 A.col1=B.col1
,那么您可以从 col1
子句中删除重复的 SELECT
。INSERT (tar.col1,tar.col2,tar.col3,tar.col4)
values( src.col1,src.col2,37,6,)
有一个虚假的尾随逗号。您可以将查询简化为:
MERGE INTO target tar
USING src
ON (src.col1 = tar.col1 AND src.col2 = tar.col2)
WHEN MATCHED THEN
UPDATE
SET col4 = 37,
col5 = 6,
col6 = SYSDATE,
col7 = 123,
col8 = SYSDATE,
col9 = 123
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3, col4)
VALUES (src.col1, src.col2, 37, 6);