浅谈oracle数据库怎么高效将大量数据从一张表迁移到另一张表

1.需求

  将百万级以上的数据从A表迁移到B表里面,B表本来就存在的记录,就做更新操作,B表之前不存在的记录,就做插入操作

2.分析

  首先,一般来说,有些人会在java代码里面实现,先将需要更新和插入的数据分别查询出来,再使用oracle的batchUpdate这个方法,一般来说,这个效率也是不错的,但是,由于oracle数据库的batchUpdate这个批量执行的方法是不会返回执行成功的条数的,由于无法知道执行的结果,风险不可预估,一般不会采取这种方法!如果要一条一条去执行,效率实在是太低.

  既然batchUpdate行不通,那么有什么好办法呢?经过本人的一番百度,终于找到了一个方法,那就是使用merge into,直接在数据库解决问题.这种方法非常高效,而且执行过程中如果遇到失败,执行会终止,且会抛出错误.换句话说,不报错,即表示全部执行成功,提交事务即可生效.

3.实现

  假如有A表,A表有FA1,FA2,FA3,FA4.....n个字段,F1为主键,有B表,B表有FB1,FB2,FB3,FB4...n个字段,FB1为主键,需要将A表的数据迁移到B表中

  直接可以这么写

   MERGE INTO B T1 

      USING (SELECT * FROM A ) T2  ON (T1.FB1 = T2.FA1 )
   WHEN MATCHED THEN
      UPDATE B SET T1.FB2= T2.FA2,T1.FB3= T2.FA3,T1.FB4=T2.FA4
   WHEN NOT MATCHED THEN
      INSERT(T1.FB1,T1.FB2,T1.FB3,T1.FB4) VALUES(T2.FA1,T2.FA2,T2.FA3,T2.FA4);

4.注意

  1.更新时,主键不能更新

  2.using 里面的那个查询语句是可以根据你的业务需求,添加where条件的,on里面的连接条件也是可以多个的,当主键是联合主键的时候,on里面可以写多个,用and连接

猜你喜欢

转载自www.cnblogs.com/luzhenggen/p/10852082.html