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          ba4          da
3.2.2比较表B与原始表A的增量差异

Select * from B minus select * from A;

结果如下:

       B1            B2

        2            bba5            dda6            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                12                   bba               24                   da                15                   dda               26                   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          22          34          15          2

结果中SUM(T)为1的为“删除”的数据,SUM(T)为2的为“新增”的数据,SUM(T)为3的为“修改”的数据。

4 分析

4.1 效率分析

序号

数据库配置

Oracle版本

原表数据量

比较表数据量

字段列数

耗时

1

Cpu:2.5GHz/内存:2048M

9i

928335

3608159

19

171.594s

2

Cpu:2.5GHz/内存:2048M

9i

928335

3608159

10

121.469s

3

Cpu:2.5GHz/内存:2048M

9i

928335

3608159

5

68.938s

4

Cpu:2.5GHz/内存:2048M

9i

49933

928335

19

33s

5

Cpu:2.5GHz/内存:2048M

9i

49933

928335

10

25.968s

6

Cpu:2.5GHz/内存:2048M

9i

49933

928335

5

11.484s

7

16cpu:3.5GHz/内存:64G

10g

575283

575283

11

13.812s

8

16cpu:3.5GHz/内存:64G

10g

109987

109987

40

2.17s

4.2实现分析

在两个结果集比较的过程中,减少原始表和比较表比较的字段数目以及原始表和比较表的数据量都可以提高效率。

5 总结

此比较方法在执行效率上,可能不是非常好,但是能解决效率要求并不太高的问题。在实现上利用了Oracle的minus函数,此文在于引起大家对于Oracle函数的认识。

oracle 两表数据对比---minus相关推荐

  1. oracle 二表做差,oracle 两表数据对比---minus

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  2. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  3. oracle 数据库表结构对比

    oracle 数据库表结构对比 由于公司工作比较混乱,总有人会改数据库中表的内容和字段. 在部署的时候总会因为数据库出现了未知的改变而发生错误. 所以需要对数据库内容进行比对,以求得到变化的内容. 导 ...

  4. 删除oracle中的一列数据,Oracle删除表数据

    本篇文章帮大家学习Oracle删除表数据,包含了Oracle删除表数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle DELETE语 ...

  5. oracle多表联合查询更新,ORACLE 两表关联更新三种方式

    不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...

  6. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...

  7. Excel中两列数据对比,找出不同数据如何查找重复项并统计重复次数

    Excel中两列数据对比,找出不同数据 问题1 excel如何查找重复项并统计重复次数 问题2

  8. oracle 误删除表数据,Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解 测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_rete ...

  9. oracle两条update语句怎么写,Oracle两表关联执行update语句代码

    Oracle两表关联执行update时,因为没有像SqlServer的update from,因此要麻烦一些,通常有以下四种方式: 第一种:更新的条件为两个表的查询关联 update customer ...

最新文章

  1. MachineLN博客目录
  2. Unicorn 4.6.3 发布,Rack的HTTP服务器
  3. 利用CH340C制作MicroPython ESP8266,ESP32的下载器-改进型
  4. 跨域,json与jsonp格式
  5. python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...
  6. 第十一篇 SpringBoot 2 x整合Swagger2
  7. wxpython下载缓慢_我可以在wxPython的wx.grid.Grid中加速优化GridCellAttr的使用吗?
  8. iPhone 12性能暴增!将再次与安卓拉开距离
  9. 最真挚的祝福最深的伤
  10. 在线教育平台签约电子化:借电子印章提速控本、服务师生
  11. 【已解决】Fortran77老代码中的do循环,在Fortran95中能否使用?
  12. ionic 配置java_ionic开发环境搭建
  13. 美国最好的计算机工程专业排名,2017年美国大学排名之计算机工程专业排名TOP100...
  14. 人物-胡玮炜:胡玮炜
  15. 第二集 第一魂环 第十一章
  16. 【真.干货】一篇文章了解关于计算机硬件那些事
  17. hub75点屏(32扫)
  18. 怎么选聚氨酯减震弹簧万向轮
  19. PTA题目 抓老鼠啊~亏了还是赚了?
  20. 区块链零知识证明:zkSNARKs与zcash

热门文章

  1. 企业如何搭建并运营好积分商城?
  2. vue实现页面点击页面滚动-禁止鼠标滑轮滚动页面
  3. 通过css和js实现流星雨效果
  4. 课堂教学实践研究之人教版九年级上册“阅读与思考”《旋转对称》
  5. 网络概念- IPRAN的含义及来历——转载
  6. 荣之学:跨境电商和淘宝哪个好?
  7. GHOST WIN8 32位软件自选安装专业优化版 201307 V4.0
  8. Transact使用
  9. Transact-SQL编程
  10. 【富文本】3如何制作U盘系统盘