所有的MIS系统都存在一个同样的需求就是对于特定的数据在一次批量操作过程中如果数据已经存在则对存在的数据按照现有情况进行
更新如果不存在则需要加入数据库这时我们就可以考虑采用 Oracle 的 MERGE 函数其具体用法如下
MERGE INTO [your tablename] [rename your table here]
USING
(
[write your query here]
)[rename your querysql and using just like a table]
ON
([conditional expression here] AND [])
WHEN
MATCHED
THEN
[here you can execute some update sql or something else ]
WHEN
NOT MATCHED
THEN
[execute something else here ! ]
下面是实例
假设一个student表 有这种需求如果学生ID存在则更改姓名
如果学生ID不存在 则插入学生信息
select>sql@kokooa>select * from student;
S_ID S_NAME S_AGE
李一
李二
李三
李四
李五
李六
select>sql@kokooa>select * from test;
ID NAME TEL ADDRESS
aaa
bbb
ccc
ddd
王五
张三
李四
merge into student s
using
(
select idnametel from test)x
on
(ss_id=xid)
when matched
then update set s_name=xname
when not matched
then insert
(s_ids_names_age)
values
(xidxnamextel);
commit;
最终结果
select>sql@kokooa>select * from student;
S_ID S_NAME S_AGE
aaa
bbb
ccc
ddd
王五
张三
李四
注意到 MERGE 语句在最后的(分号)这仅仅代表 MERGE 为一条完整的 SQL 语句同时要说明一下 USING 语句下方的 SQL 语句这个语句仅仅是为了给后面语句的执行做准备性的工作因此如果你需要的数据仅仅是通过参数传入的那些值的话你就不需要再利用传入进来的参数在重新从库中查询在 Oracle 的系统表中有张 Dual 表这样你便可以使用 select [your arguments] from dual 的方式来构建这里的 SQL 语句其中 [your arguments] 是你得到的一系列的参数由于Dual表是系统表因此可以大幅提升SQL的执行效率