论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> ORACLE认证 >> IT正文
教你用Oracle解析函数快速检查序列间隙
 作者:佚名     2007-3-15 13:29:06        来源:不详  浏览次数:

数据库表格中经常用到值序列。无论是作为数据本身自然产生的,还是由Oracle 的序列对象分配的,它的目的就是用一个唯一的、递增的数字给每一行编号。

在编号的过程中,产生间隙的原因多种多样。如果一个存储过程从一个序列中挑选某个数字,定为本地变量,但是从来不用它,这个数字就丢失了。它将不能再返回到原序列中,结果就造成数值序列中存在一个间隙。关系型数据库模型中不必担心这一点。但是有时候人们在意这一点,这些人想知道是哪些数字丢失了。

一个显而易见的方式就是用PL/SQL,在已排序指针中循环,并且用一个本地变量进行存储,把每一个数值与其前一行的进行比较。这种方法的问题在于效率很低,速度很慢。另外一个不常用的解决办法就是对表格做一个自合并,实质也就是用某种标准使每一行与其前一行相匹配。这种方法很难编写代码。

Oracle的解析函数为检查间隙提供了一种要快捷得多的方法。它们使你在使用完整的、面向集合的SQL处理的同时,仍然能够看到下一个行(LEAD)或者前一行(LAG)的数值。

下面是这些函数的格式:

{LEAD | LAG} (value_expression, offset, default) 



OVER ([PARTITION BY expr] ORDER BY expr)

通常,value_expression是一个你想要检索的数据列。参数offset是指你想要往前或往后读取的行数,default则是到达任意一个分区的开头或者结尾(即没有与之相匹配的行)时返回的数值。

脚本是一系列从工作地传感器自动收集来的数据。传感器装置自动给每一个测量值编上号,我们要找出结果有没有缺失。

我们将数据按照测量值编号排序,运用LAG函数,把偏移量设置为1,使得每一行与其前一行对应起来。第一行将没有对应量,所以相应地,将返回默认值0。因为间隙不可能发生在第一行,所以我们通过之前要求测量值大于0而将其删除。

剩下的就是一组虚拟的行,显示的是前一行的测量值编号(“before_gap”)和当前行的测量值编号(“after_gap”)。如果两者之差大于1,就说明这两行之间存在间隙。

同时也要注意到,WITH子句在查询开始的时候把解析子查询命名为“aquery”。那么我们就可以在主SELECT 语句中的WHERE 子句中访问“aquery”中的数列。



责任编辑:lss
  相关新闻
允许内部用户使用Outlook Web Access
JAVA基础:在javascript中应用Object
教你备考新大纲的二级C语言考试
教你如何巧妙设定匿名FTP的安全
用Oracle的异构服务连接异种数据源
Java调用Oracle的过程和函数
实战JBOSS――教你写第一个EJB----2
教你用JAVA ID生成器去生成逻辑主键
教你在Oracle中启动脚本跟踪存储过程
穷人的通用OLAP方案I
用Oracle的异构服务连接异种数据源
教你在Oracle中启动脚本跟踪存储过程
用ORACLE数据库和JSP连接时要注意的问题
Java调用Oracle的过程和函数
使用Observer模式
教你用JAVA ID生成器去生成逻辑主键
穷人的通用OLAP方案I
实战JBOSS――教你写第一个EJB----2
应用OSCache提升J2EE系统运行性能
应用OSCache提升J2EE系统运行性能
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号