你可以试试这个
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
语法起初看起来有点令人生畏,但如果我们从上到下阅读,它是非常直观的。请注意以下条款:
•MERGE(第 1 行):如前所述,这是 Oracle 中的第 4 条 DML 语句。我们可能希望添加的任何提示都直接跟在这个关键字后面(即 MERGE /*+ HINT */);
•INTO(第 2 行):这是我们为 MERGE 指定目标的方式。目标必须是表或可更新视图(此处不能使用内嵌视图);
•USING(第 3 行):USING 子句表示 MERGE 的源数据集。这可以是单个表(如我们的示例)或内联视图;
•ON ()(第 4 行):ON 子句是我们提供源数据集和目标表之间的连接的地方。注意连接条件必须在括号中;
•WHEN MATCHED(第 5 行):当我们在目标表中已经有匹配的记录(即源数据集和目标数据集之间存在连接)时,该子句是我们指示 Oracle 做什么的地方。在这种情况下,我们显然想要一个 UPDATE 。此子句的限制之一是我们不能更新 ON 子句中使用的任何列(当然我们不需要,因为它们已经匹配)。任何包含连接列的尝试都会引发不直观的无效标识符异常;和
•WHEN NOT MATCHED(第 10 行):此子句用于插入当前没有匹配的记录。