资源描述:
《oracle两表数据对比minus》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、oracle 两表数据对比---minus1引言在程序设计的过程中,往往会遇到两个记录集的比较。如华东电网PMS接口中实现传递一天中变更(新增、修改、删除)的数据。实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等等。本文主要讨论利用ORACLE的MINUS函数,直接实现两个记录集的比较。2实现步骤假设两个记录集分别以表的方式存在,原始表为A,产生的比较表为B。2.1判断原始表和比较表的增量差异利用MINUS函数,判断原始表与比较表的增量差异。此增量数据包含两部分:1)原始
2、表A有、比较表B没有;2)原始表A和比较表B都有,但是某些字段发生了改变。2.2判断比较表与原始表的增量差异利用MINUS函数,判断比较表与原始表的增量差异。此增量数据包含两部分:1)比较表B有、原始表A没有;2)比较表B和原始表A都有,但是某些字段发生了改变。2.3得出结果集利用SQL语句中的对两种增量差异的处理,实现判别出比较表相对于原始表是进行了“插入”、“修改”、“删除”的情况。3实例演练3.1创建表并插入数据CreatetableA(A1number(12),A2varchar2(50)
3、);CreatetableB(B1number(12),B2varchar2(50));InsertIntoAValues(1,'a');InsertIntoAValues(2,'ba');InsertIntoAValues(3,'ca');InsertIntoAValues(4,'da');InsertIntoBValues(1,'a');InsertIntoBValues(2,'bba');InsertIntoBValues(3,'ca');InsertIntoBValues(5,'dda')
4、;InsertIntoBValues(6,'Eda');COMMIT;3.2进行增量差异数据比较3.2.1原始表A与比较表B的增量差异Select*fromAminusselect*fromB;结果如下: A1 A2--------------------------------------------------------------- 2 ba 4 da3.2.2比较表B与原始表A的增
5、量差异Select*fromBminusselect*fromA;结果如下: B1 B2--------------------------------------------------------------- 2 bba 5 dda 6 Eda3.2.3两种增量差异的合集此合集包含3类数据:--1、原始表A存在、比较表B不存在,属于删除
6、类数据,出现次数1--2、原始表A不存在、比较表B存在,属于新增类数据,出现次数1--3、原始表A和比较表B都存在,属于修改类数据,出现次数2SelectA1,A2,1tfrom(Select*fromAminusselect*fromB)unionSelectB1,B2,2tfrom(Select*fromBminusselect*fromA);结果如下: A1 A2 T------------------------
7、------------------------------------------------- 2 ba 1 2 bba 2 4 da 1 5 dda 2
8、 6 Eda 23.3得到结果SelectA1,sum(t)from(SelectA1,A2,1tfrom(Select*fromAminusselect*fromB)unionSelectB1,B2,2tfrom(Select*fromBminusselect*fromA))GroupbyA1;结果如下: A1 SUM(T)----------------------- 6