利用MINUS函数和OVER函数,直接通过视图实现两个记录集的比较

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 03:50 点击:

1 前言 
------------------------------------------------------------- 
在程序设计过程中,往往遇到比较两个记录集的差异。如,判断原来传入的订单资料与后来传入的订单资料之间的差异,并且将差异的数据显示给用户。 
实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较...等等,当然返回差异数据的方式多种多样,既可以是游标,又可以临时表或其它方式。 
本文主要论述利用ORACLE的MINUS函数和OVER函数,直接通过视图实现两个记录集的比较。 
------------------------------------------------------------- 
2 实现步骤 
------------------------------------------------------------- 
2.1 利用MINUS函数,判断原始表与比较表的增量差异,两个记录集分别以表的方式存在,为表A和表B。其中,A表为原始表,B表为后来产生的比较表,即要与A表进行比较的数据表> 
增量差异指,A中存在的记录,哪些在B表中没有的,也就是说,A表的记录被修改或删除 
 
2.2 利用MINUS函数,判断比较表与原始表的增量差异 
即B表中存在的记录,哪些在A表中没有,也就是说,B表新增的或A表修改的记录 
 
2.3 连接A-B的增量差异表和B-A的增量差异表,利用OVER函数判断数据重复的次数 
如果数据重复次数为2,则该记录的标识为“修改”; 
如果数据重复次数为1,且出现在A-B的增量差异表中,则该记录的标识为“删除”; 
如果数据重复次数为1,且出现在B-A的增量差异表中,则该记录的标识为“新增” 
 
------------------------------------------------------------- 
3 实例演练 
------------------------------------------------------------- 
--3.1 创建数据表和实例环境;设原始记录集为数据表A,比较记录集为数据表B,当然实际应用过程中,参与比较的通常是视图,不会是数据表> 
--测试环境配置 
Drop Table a; 
Drop Table b; 
Create Table a(a1 Numeric(28),a2 Varchar2(10)); 
Create Table b(b1 nUMERIC(28),b2 VarChar2(10)); 
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; 
Select * from a; 
Select * From b; 
 
--3.2 创建比较视图 
Create Or replace View VW_Test_Minus as  
    --标识重复出现的次数(次数=1->删除或新增,次数=2->修改) 
    SELECT A1 
          ,a2 
          ,t --A表/B表标识 
          ,ROW_NUMBER() OVER (PARTITION BY A1 ORDER BY A1) RN --记录重复次数 
      FROM  
         ( 
             Select a1,a2,'A表' T   --查看A表存在,B表没有的记录(修改或删除) 
                from  
                   ( 
                      (Select * from a ) 
                      Minus  
                      (Select * From b) 
  &

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Table函数使用简介
      • Oracle数据库Constraint约束的常用操作及异常处理
      • Bulk Collect性能分析(zz)
      • export/import的使用
      • OCP043第十五讲 Database Security
      • ORACLE10gr2数据导入MySQL方案
      • oracle 让sys用户可以使用isqlplus
      • 在oracle数据库下使用iSQL*Plus DBA访问数据库
      • Oracle行列转换小结
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1