动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.在Oracle里使用RAID.
.新手上路:Oracle分析函数学习笔记.
.Oracle数据库取消8080端口占用.
.redflag认证系统管理部分笔记.
.如何使用iso文件?.
.在P4机器上安装Oracle 8i.
.如何在Oracle中用PL/SQL产生随即.
.在freebsd下安装oracle.
.Oracle9i 数据库的设计指引全集(.
.常用sql script.
.Oracle 数据库中常用操作的具体说.
.Oracle数据库百分比格式化的解决.
.让你的连接查询加速.
.让你学会简单改变数据库sid的方法.
.回滚段.
.oracle入门学习.
..NET访问Oracle数据库相关.
.Chapter1:Oracle 10g Oracle DAB.
.使用Oracle数据库高级复制中最简.
.Oracle中关数据库对象的统计分析.

通过SELECT语句实现两个记录集的比较

发表日期:2008-2-9 |



  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)
           ) a2b
        Union --联合A表与B表不相同的记录集
        Select b1,b2,'B表' T  --查看B表存在,A表没有的记录(修改或新增)
          from 
           (
             (Select * from b )
             Minus 
             (Select * From a)
             ) b2a
       ) F;
  /
  --3.3 比较结果集
  Select a1
    ,a2
    ,T
    ,Rn
    ,Decode(Rn --标识记录变化
     ,2,'修改'
     ,Decode(T
       ,'A表','删除'
       ,'新增')) Mark
    From VW_Test_Minus
     Where Rn=(Select Count(*) From VW_Test_Minus V Where V.a1=VW_Test_Minus.a1)
  ;
  4 后记
  许多DBA都非凡痛恨那些希望通过一句SELECT语句来实现复杂用户需求的编码人员,使用MINUS和OVER函数来实现数据比较,在执行效率上,可能会存在问题。

  本文的目的,并不在于讨论程序运行的效率,而在于抛砖引玉,引起大家对OVER函数的重视和对MINUS函数的认知。
上一篇:9i新特性之二安全篇 人气:582
下一篇:让我们一起学做业余DBA! 人气:503
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-9-5 AyWeb企业网站管理系统 v2.3 bui
2008-9-5 美女写真小偷程序联盟 v3.0 buil
2008-9-5 老Y文章管理系统 v2.1
2008-9-5 SiteDynamic企业网站管理系统 v1
2008-9-5 MyCOM企业网站管理系统 v1.0 Bui
2008-9-5 乐风CMS影视版 2008
2008-9-5 幻影电影视频系统TvsCms v1.3 伪
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵