oracle原始表有几个,oracle 两表数据对比---minus

5268f80b9b1e01f982625ef6fac83ca1.png

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

效率分析

序号

数据库配置

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

标签:序号   union   创建   ext   varchar   程序设计   minus   lin   otto

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/ios9/p/13202743.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值