当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
如何使用oracle中的mergininto批量添加数据
发布时间:2009/10/23 14:34:06 来源:www.xue.net 编辑:城市总裁吧

  所有的MIS系统都存在一个同样的需求,就是对于特定的数据,在一次批量操作过程中,如果数据已经存在,则对存在的数据按照现有情况进行
  更新,如果不存在,则需要加入数据库。这时,我们就可以考虑采用 Oracle 的 MERGE 函数,其具体用法如下:
  MERGE INTO [your table-name] [rename your table here]
  USING
  (
  [write your query here]
  )[rename your query-sql 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不存在 则插入学生信息。
  sql@kokooa>select * from student;
  S_ID S_NAME                  S_AGE
  ---------- -------------------- ----------
  1 李一                       15
  2 李二                       15
  3 李三                       11
  4 李四                       12
  5 李五                       13
  6 李六                       14
  sql@kokooa>select * from test001;
  ID NAME          TEL ADDRESS
  ---------- -------- ---------- --------------------
  1 aaa           234
  2 bbb           234
  3 ccc           234
  4 ddd
  5 王五          111 333
  6 张三           22
  7 李四           20
  merge into student s
  using
  (
  select id,name,tel from test001)x
  on
  (s.s_id=x.id)
  when matched
  then update set s_name=x.name
  when not matched
  then insert
  (s_id,s_name,s_age)
  values
  (x.id,x.name,x.tel);
  commit;
  最终结果:
  sql@kokooa>select * from student;
  S_ID S_NAME                  S_AGE
  ---------- -------------------- ----------
  1 aaa                        15
  2 bbb                        15
  3 ccc                        11
  4 ddd                        12
  5 王五                        13
  6 张三                       14
  7 李四                       20
  注意到 MERGE 语句在最后的“;”(分号),这仅仅代表 MERGE 为一条完整的 SQL 语句。同时,要说明一下 USING 语句下方的 SQL 语句。这个语句仅仅是为了给后面语句的执行做准备性的工作,因此,如果你需要的数据仅仅是通过参数传入的那些值的话你就不需要再利用传入进来的参数在重新从库中查询。在 Oracle 的系统表中,有张 Dual 表,这样,你便可以使用 “select [your arguments] from dual ”的方式来构建这里的 SQL 语句,其中 [your arguments] 是你得到的一系列的参数,由于Dual表是系统表,因此可以大幅提升SQL的执行效率。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved