oracle数据库两表数据比较
本文转自http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html
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');
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函数的认识。
相关文章
- Oracle数据库导入导出 imp/exp备份还原
- C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
- PL/SQL Developer连接本地Oracle 11g 64位数据库
- oracle SQL Develop导出数据库中的表格数据到excel
- 【Oracle】rman upgrade catalog
- 【Oracle】alter system set events 相关知识
- 中断ORACLE数据库关闭进程导致错误案例
- oracle 11g 数据库密码大小写敏感性更改
- INS-20802 Oracle Cluster Verification 实用程序失败
- Oracle数据库常用函数使用--持续更新中
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
- 使用E-MapReduce集群sqoop组件同步云外Oracle数据库数据到集群hive
- 在64位机器上使用plSQL连接Oracle的问题(SQL*Net not properly installed)
- 连接ORACLE数据库,是不是必须要安装oracle客户端的运行时
- 常用的Oracle数据库语句 (待更新完毕)
- Oracle 创建数据库
- C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
- PostgreSQL的学习心得和知识总结(十六)|语法级自上而下完美实现Oracle数据库WITH FUNCTION功能
- Oracle 和 AWS Redshift 获取 数据库所有表名和列名的
- Oracle的学习心得和知识总结(十三)|Oracle数据库Real Application Testing之Database Replay实操(一)
- Oracle的学习心得和知识总结(六)|Oracle数据库同义词技术详解
- Oracle的学习心得和知识总结(三)|Oracle数据库重要函数详解 单行函数(一)(建议收藏 持续更新...)