oracle数据库两表数据⽐较
1 引⾔
在程序设计的过程中,往往会遇到两个记录集的⽐较。如华东电⽹PMS接⼝中实现传递⼀天中变更(新增、修改、删除)的数据。实现的⽅式有多种,如编程存储过程返回游标,在存储过程中对两批数据进⾏⽐较等等。
本⽂主要讨论利⽤ORACLE的MINUS函数,直接实现两个记录集的⽐较。
2 实现步骤
假设两个记录集分别以表的⽅式存在,原始表为A,产⽣的⽐较表为B。
2.1 判断原始表和⽐较表的增量差异
利⽤MINUS函数,判断原始表与⽐较表的增量差异。
此增量数据包含两部分:
1)原始表A有、⽐较表B没有;
2)原始表A和⽐较表B都有,但是某些字段发⽣了改变。
2.2 判断⽐较表与原始表的增量差异
利⽤MINUS函数,判断⽐较表与原始表的增量差异。
此增量数据包含两部分:
1)⽐较表B有、原始表A没有;
2)⽐较表B和原始表A都有,但是某些字段发⽣了改变。
2.3 得出结果集
利⽤SQL语句中的对两种增量差异的处理,实现判别出⽐较表相对于原始表是进⾏了“插⼊”、“修改”、“删除”的情况。
3 实例演练
3.1创建表并插⼊数据
Create table A(A1 number(12),A2 varchar2(50));
Create table B(B1 number(12),B2 varchar2(50));
Insert Into A Values (1,'a');
Insert Into A Values (2,'ba');
Insert Into A Values (3,'ca');
Insert Into A Values (4,'da');
Insert Into B Values (1,'a');
Insert Into B Values (2,'bba');
Insert Into B Values (3,'ca');
Insert Into B Values (5,'dda');
Insert Into B Values (6,'Eda');
oracle数据库怎么查询表COMMIT;
3.2进⾏增量差异数据⽐较
3.2.1原始表A与⽐较表B的增量差异
Select * from A minus select * from B;
结果如下:
A1 A2
---------------------------------------------------------------
2 ba
4 da
3.2.2⽐较表B与原始表A的增量差异
Select * from B minus select * from A;
结果如下:
B1 B2
---------------------------------------------------------------
2 bba
5 dda
6 Eda
3.2.3两种增量差异的合集
此合集包含3类数据:
--1、原始表A存在、⽐较表B不存在,属于删除类数据,出现次数1
--2、原始表A不存在、⽐较表B存在,属于新增类数据,出现次数1
--3、原始表A和⽐较表B都存在,属于修改类数据,出现次数2
Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A);
结果如下:
A1 A2 T
------------- -------------------------------------------------- ----------
2 ba 1
2 bba 2
4 da 1
5 dda 2
6 Eda 2
3.3得到结果
Select A1,sum(t) from
(Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A))
Group by A1;
结果如下:
A1 SUM(T)
-----------------------
6 2
2 3
4 1
5 2
结果中SUM(T)为1的为“删除”的数据,SUM(T)为2的为“新增”的数据,SUM(T)为3的为“修改”的数据。
4 分析
4.1实现分析
在两个结果集⽐较的过程中,减少原始表和⽐较表⽐较的字段数⽬以及原始表和⽐较表的数据量都可以提⾼效率。
5 总结
此⽐较⽅法在执⾏效率上,可能不是⾮常好,但是能解决效率要求并不太⾼的问题。在实现上利⽤了Oracle的minus函数,此⽂在于引起⼤家对于Oracle函数的认识。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论