本文转自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函数的认识。

最新文章

  1. Cordova系列(一)
  2. HDU2929 Bigger is Better[DP 打印方案 !]
  3. Django入门之自定义页面
  4. 【MYSQL】创建虚表来辅助数据库查询
  5. CCM加密学习
  6. bzoj 3858: Number Transformation 暴力
  7. ios专题 -线程互斥与同步
  8. QTableWidget中添加按钮
  9. 344. Reverse String(C++)
  10. 数据链路层-点对点协议PPP
  11. FTP服务添加用户及设置权限
  12. yii2 Nav::widget() 和 Menu::widget()
  13. SpringCloud2.0入门4-springboot-admin监控
  14. 8. 同步锁Lock
  15. vue实现购物车和地址选配(二)
  16. LinkedHashMap
  17. Java常用API基础
  18. jenkins之参数化构建
  19. javascript 基础知识学习1
  20. 多线程中使用curl致coredump问题

热门文章

  1. centos 7.0 安装
  2. AWK命令的用法
  3. webuploader横向按钮样式
  4. QT实现贪吃蛇
  5. RPC-远程过程调用协议
  6. 大数据架构师NoSQL建模技术
  7. solr6.1-----相关配置-详细介绍-启动-全文检索
  8. [译]ES6箭头函数和它的作用域
  9. ASP.NET中gridview获取当前行的索引值
  10. 【R】如何确定最适合数据集的机器学习算法 - 雪晴数据网