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函数的认识。

使用exp/imp 在oracle数据库间导数据

最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

oracle 两表数据对比---minus

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

Oracle数据库创建表是有两个约束带有默认索引

Oracle数据库创建表是有两个约束带有默认索引.1.主键primary Key:唯一索引.非空2.唯一Unique:唯一索引,可以是空值如果没有设定主键和唯一约束,表中不会有默认索引的. 建立主键/ ...

定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

Oracle 数据库整理表碎片

Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎 ...

Oracle数据库中的数据出错的解决办法

http://www.jcwcn.com/article/database/oracle/ 今天上班犯了一个严重的错误:把我们系统所使用的Oracle数据库中的数据给改掉了!当发现自己改错时,顿时冒了 ...

Oracle数据库四种数据完整性约束

Oracle数据库四种数据完整性约束 1.实体完整性 同样的数据不能重复插入(1)采取什么措施保证实体完整性?我们可以给表创建主键约束吗,主键保证了数据的唯一性,主键可以保证同一条记录只能插入一次. ...

将Oracle数据库中的数据写入Excel

将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

随机推荐

C++-文件【1】-按行读文本文件的两种方法

测试环境—— 系统:Win7 64bit 编译器:TDM-GCC 4.9.2 64-bit Release #include #include

如何让ConfigurationManager打开任意的配置文件

VisualStudio的配置文件很好很强大,用来保存数据库连接字符串或键值对都非常方便,只需要通过ConfigurationManager的ConnectionStrings或AppSettings ...

(转)css3-box-sizing属性详解

box-sizing是CSS3的box属性之一.一说到CSS的盒模型(Box model)我想很多人都会比较烦,特别是对于新手,然而这个Box model又是我们CSS运用中比较重要的一个属性.那么C ...

[BZOJ3872][Poi2014]Ant colony

[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

SQL2000和SQL2005和SQL2008同时安装问题

原文:SQL2000和SQL2005和SQL2008同时安装问题 SQL2000和SQL2005和SQL2008同时安装问题 1,因为SQL2000安装过程中无法修改实例名称,故安装过程中必须先安装S ...

第8章BOM笔记

第八章 BOM 一. Window 在浏览器中window有双重角色,他既是JavaScript访问浏览器窗口的一个借口,又是ECMAscript 规定的Global对象. 1.全局作用域 由于win ...

php __FILE__,__CLASS__等魔术变量,及实例

今天突然看到几个自己不认识的魔术变量 不知道怎么用于是就上网查了一下,看到了这篇博客,写的真不错,希望自己以后也能学会这样总结 张映 发表于 2010-12-13 分类目录: php 标签:php,  ...

Counting Stars

Counting Stars 题目链接:http://acm.xidian.edu.cn/problem.php?id=1177 离线+一维树状数组 一眼扫过去:平面区间求和,1e6的数据范围,这要h ...

I/O流

转自:http://www.cnblogs.com/dolphin0520/p/3791327.html 一.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的 ...

(三)—Linux文件传输与mysql数据库安装

文件传输工具使用    为了速成,关于linux系统的学习都先放一放,用到哪个知识点就查哪个,这里想在linux下装一些服务练练手,最先想到的就是装个mysql数据库试试. 因为我用的是虚拟机下的li ...

oracle两个表数据比较,oracle数据库两表数据比较相关推荐

  1. 把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方。Duplicate entry ’3′ for key ‘PRIMARY’

    把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方.Duplicate entry '3′ for key 'PRIMARY'你的主键是不可 ...

  2. 把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms

    把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方.Duplicate entry '3′ for key 'PRIMARY' 你的主键是不 ...

  3. 把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方

    把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方 昨天编辑忽然跟我说dedecms后台文章发布不了,提示错误,如图: 把数据保存到数据库附 ...

  4. linux查看mongo表大小,MongoDB_mongodb 查看数据库和表大小,1,查看数据库db.stats() - phpStudy...

    mongodb 查看数据库和表大小 1,查看数据库 > db.stats(); { "db" : "test", //当前数据库 "collec ...

  5. 数据库地区表sql语句,数据库地区表包含省市县

    数据库地区表sql语句,数据库地区表包含省市县 包含省市县的数据表,需要的可以参考,sql语句一个博客字数太多发布不了,剩下的在下一个博客里面,之前也是在网上找的,感谢分享 -- ---------- ...

  6. java删除数据库表格,《Java:数据库更新excel文件的数据同时删除数据库原来的数据》 excel表格如何删除相同数据库...

    Java:数据库更新excel文件的数据同时删除数据库原来的数据 重新写入blob的byte[],就可以覆盖了....... excel表格怎么检查有重复的数据库 方/步骤 打开需要编辑的Excel表 ...

  7. 【随记】Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题

    Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题 背景 问题再现 结论 背景 用户在前端界面的表格中填写数据,通过 text() 获取到的数据插入到数据库表中,该过程涉及到了数据类 ...

  8. oracle数据泵到处表结构,数据泵导出数据库所有表结构

    Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaov ...

  9. Oracle亿级数据查询处理(数据库分表、分区实战)

    大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机(刚接到这个项目时候,数据库经常宕机o(╯□╰)o). 那么,如何处理上亿级的数据量呢?如何从数据库经常宕机到上亿数据秒查?仅以此篇文章作 ...

  10. mysql创建数据库后怎么导入表_MySQL--初步了解数据库和表,创建数据库并导入数据...

    在上一篇文章当中,我们初步了解了MySQL Workbench的图形界面. 接下来,我们就开始去初步了解数据库和表,以及创建一个数据库和向MySQL里面导入数据. 一.初步了解数据库创建一个数据库 1 ...

最新文章

  1. WordPress添加前台注册功能
  2. 基于 DDD 设计并实现模块化单体应用
  3. iOS判断UIWebView加载完成的方法
  4. 2022年考研结束了
  5. redis docker安装、进入命令行后启动服务
  6. 网络编程学习2-套接字编程简介
  7. ajax的嵌套需要注意的问题
  8. python闭包(一分钟读懂)
  9. 加速Qt在线更新--使用traefik-1.7.24(不支持traefik-2.0以上版本
  10. 2017北京国庆刷题Day5 morning
  11. 服务器显示灰色怎么办,服务器远程桌面显示灰色
  12. WPS Word为PDF签名
  13. 虚拟机opnsense作为dhcp服务器,在OPNsense中,通过主机名或域名访问内部设备
  14. 对服务器上出现大量的SYN_RCVD状态的TCP连接的问题分析
  15. 深圳计算机学校排名2015年,2015深圳各区初中最新排名,10各区学校都有
  16. C:\Windows\system32>net start MySQL 发生系统错误 1058。 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
  17. 如何修改Julia语言环境的安装包默认安装文件夹的位置
  18. java英语自我介绍_java自我介绍英语口语
  19. 【Vue如何让v-show也有动画效果】
  20. 共享安装 cacti 过程中的一些经历 cacti 中文-linux - sun solaris

热门文章

  1. 关于量子计算机的一些整理 (精心整理原创) (1)
  2. Unity触摸屏TouchPhase多点触碰旋转放大缩小
  3. (python代码)BP神经网络模型
  4. [微信小程序] 微信小程+ts中 箭头函数和this的问题
  5. 重启c语言-查验身份证
  6. 信息处理技术员知识点总结(错题记录)——考试通过,完结撒花
  7. java试题汽车接口_用Java程序创建一个汽车接口,接口中要定义汽车应有的属性和行为,随后编写多个汽车接口的实现类,...
  8. Python--如何计算皮尔逊相关系数(Pearson correlation coefficient)
  9. ios提醒事项同步日历scriptable代码
  10. python海龟绘图画玫瑰花_python学习(二)之turtle库绘图