标签:
1.into 子句
在into子句中指定所要修改或者插入数据的目标表
2.using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。
3.on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的那些行,oracle则插入数据源中相应数据。
4.when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。
5.merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
6.merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。
下面列出merge的基本用法 (此处目标表和源表表结构相同)
1) matched 和not matched 同时使用
merge into 目标表 a
using 源表 b on (关联条件 a.字段1 = b.字段1)
when MATCHED then
update set a.字段2=b.字段2,......
when NOT MATCHED then
insert(a.字段2,a.字段3)
values(b.字段2,b.字段3);
2) 只有not matched clause,也就是只插入不更新
merge into 目标表 a
using 源表b on (关联条件 a.字段1 = b.字段1)
when NOT MATCHED then
insert(a.字段2,a.字段3)
values(b.字段2,b.字段3);
3) 只有matched clause, 也就是只更新不插入
merge into 目标表 a
using 源表 b on (关联条件 a.字段1 = b.字段1)
when MATCHED then
update set a.字段2=b.字段2,......
另外,merge命令的update部分可以包含一个delete子句。delete子句(有其自己的where子句)可以删除目标表中被merge更新的行。delete...where子句可以计算更新值,而不是目标表中的初始值。如果目标表中的行符合delete...where条件但不在merge所作用(就如on条件所定义的)的行集范围内,就不会删除。
具体语法为:
using 源表 b on (关联条件 a.字段1 = b.字段1)
when MATCHED then
update set a.字段2=b.字段2,......
delete where (a.字段5=b.字段5) ;
注意:此处的源表可以不仅仅是一张表,也可以是查询出来的结果集。此命令在db2中也同样适用。
标签:
原文地址:http://www.cnblogs.com/zuozongyao/p/4378700.html