首先说下应用场景,客户方有两套人力资源管理系统,假设A系统和B系统,A系统是国内总部的,B系统是海外子公司的,现在A系统总部要求,能看到海外B系统的数据,因为A系统和B系统是不可能直接通讯的。所以需要B系统定期把数据导出,然后再导入到A系统,本来只要B系统每次都导出增量数据,那么A系统就不需要做多少事情了。结果B系统一方的实施方不愿意导出增量数据,只能每次导出全量数据,结果A系统在B系统每次导入全量数据的时候就需要去判断新增了多少数据,修改了多少数据,删除了多少数据。于是哥哥我就接到了这个坑爹的任务。。。。
1、我们设计了几张临时表,用于储存临时数据,使用的是窄表,即KEY-VALUE这样模式的表结构。比如有一条记录 USER_ID:001,USER_NAME:TOM,USER_AGE:18;
那么数据库存储为3条记录:
ID:001,KEY:USER_ID,VALUE:001
ID:001,KEY:USER_NAME,VALUE:TOM
ID:001,KEY:USER_AGE:18
2、工作过程,首先导入的数据先全部拆分到TEMP的临时表中,然后抽取A系统中已存在的数据,同样拆分到另一张TEMP1临时表中,然后使用MINUS(oracle数据库的关键字)来相减TEMP和TEMP1的全部数据,这样就能得出新增和删除的数据,然后还需要用一