甲骨文数据匹配合并成的实例详解

  

<强>甲骨文数据匹配合并成的实例详解

  

<强>前言:
  

  

,很久之前,估计在2010年左右在使用Oralce,当时有个需求就是需要对两个表的数据进行匹配,这两个表的数据结构一致,一个是正式表,一个是临时表,这两表数据量还算是比较大几百m .业务需求是用临时表中的数据和正式表的匹配,所有字段都需要一一匹配,而且两表还没有主键,这是一个比较麻烦和糟糕的事情。

  

场景:
  

  

1,如果两表所有字段值都一致则不处理;
  2,如果有部分字段不一致则更新。
  3,如果正式表中数据在临时表中不存在,则需要删除;

  

满足上面场景的三个功能即可,可以用程序如(java、C、C #)等各种实现,也可以使用存储过程甲骨文实现;
  

  

考虑之后用程序来做,这肯定是可以实现,但是撇开繁琐的数据读取,操作sql之外,还需要匹配,而且效率也是个问题,就决定用存储过程来实现,先前是使用了如果存在来匹配。后面发现效率不高,比较慢;后续改进之后引入了Oracle并入来实现;

  

具体事例代码(字段删除了大部分)如下:

  

1,对临时表L_TABLE中数据与正式表Z_TABLE比较,如果各个字段值比较不相等则认为临时表的这行数据是新增的,然后插入到正式表中。
  

        并入Z_TABLE t1   使用(   选择   S_SYSTEM_ID,   S_PORT_ID,   S_SYSTEM_NAME   在S_SYSTEM_NAME="广东”   从L_TABLE   )t2>   并入Z_TABLE t1   使用(   选择S_SYSTEM_ID、S_PORT_ID S_SYSTEM_NAME Z_TABLE   -   选择S_SYSTEM_ID、S_PORT_ID S_SYSTEM_NAME L_TABLE   )t2   (   t1.S_PORT_ID=t2。S_PORT_ID t1.S_SYSTEM_ID=t2。S_SYSTEM_ID和nvl (t1.S_SYSTEM_NAME, ' 1 ')=nvl (t2.S_SYSTEM_NAME ' 1 ')   )   当匹配   更新组t1。additionalInfo=皑尅?   删除在t1。additionalInfo=皑尅?   之前      

上面sql意思是挑选出正式表和临时表中的差异数据(包括各个字段值的差异),这里用了甲骨文的-函数进行刷选,其实这部分就是需要删除的数据,将这部分数据集合拿去和正式表中进行匹配,如果在正式表中存在则更新删除标识,进行删除只

  


  

  

因为两表都是没有主键,所以无法使用唯一判断用来删除作为删除依据,而且合并成的语句测试了下删除必须要跟在更新后,这点比较纠结,所以只能给正式表加一个扩展字段additionalInfo来作为删除的标记,以便删除处理。

  

通过以上两个步骤,正式表和临时表的数据已同步完成!

  

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

甲骨文数据匹配合并成的实例详解