首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言版
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [备考指南]Oracle数据库中获取固定记…
· [计算机专题]新手初用宽带路由器要注意…
· [计算机专题]ASP网站远程客户实现功能
· [计算机专题]快速初始化Variant和Strin…
· [计算机专题]全国计算机等级考试准考证…
· [学习辅导]什么是合格交换机
· [学习辅导]无法共享上网,源自IP突然…
· [试题下载]WPSOffice中防止插入压缩图…
· [试题下载]共享WPS中符合国人习惯的好…
· [备考指南]浅谈Java中利用JCOM实现仿…
 精品课程
· [精品课程推荐]08年投资项目管理师考…
· [精品课程推荐]08年职称日语考试辅导…
· [精品课程推荐]08年环境影响评价师辅…
· [精品课程推荐]08年质量资格考试辅导…
· [精品课程推荐]08年会计职称辅导报精…
· [精品课程推荐]08年建筑师考试辅导京…
· [精品课程推荐]08职称英语考试辅导王…
· [精品课程推荐]08年咨询工程师考试名…
· [精品课程推荐]08年监理工程师考试辅…
· [精品课程推荐]经济师考试网上辅导报…
 考试动态
· [二级考试动态]重庆:计算机等级考试考点…
· [二级考试动态]2008年计算机等级考试时间…
· [二级考试动态]上海:2008年上半年全国计…
· [二级考试动态]北京:2007年9月计算机等级…
· [二级考试动态]2007年12月全国计算机职业…
· [二级考试动态]青岛:2008年上半年计算机…
· [二级考试动态]宁夏:2007年9月计算机等级…
· [二级考试动态]北京地区计算机等级考试10…
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
 试题下载
· [试题下载]2007年计算机等级考试二级…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]2007年9月二级VB试题答案
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VF模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]VC++中利用/GS开关防止缓冲…
· [试题下载]2007年4月计算机等级考试二…
 学习辅导
· [学习辅导]系统无法自动保存设置
· [学习辅导]用C#把文件转换为XML
· [学习辅导]C#中用API实现MP3等音频文…
· [学习辅导]C#实现的18位身份证格式验…
· [学习辅导]对C#泛型中的new()约束的一…
· [学习辅导]C语言中数组和指针的互操作
· [学习辅导]C/C++数组名与指针区别深入…
· [学习辅导]如何才能修改系统表,比如…
· [学习辅导]怎样使用一个查询获得数据…
· [学习辅导]为什么打开表有时也会提示…
 

Oracle数据库中获取固定记录数的实用方法

文章录入:editor002    责任编辑:editor002   2008-5-6 15:39:35  来源:本站原创  点击数:
 
 在实际的工作和学习中,为了分页或查询性能的需要,往往需要从数据库查询固定行数的记录,不同的数据库有不同的SQL语句来完成,在Oracle数据库中,我们可以用下面的方法来实现,假设要从一个有百万条记录的表中每次取10万条进行处理,可以按下面步骤进行:

  1、创建表

  Drop TABLE VEHICLE;

  Create TABLE VEHICLE (

  MAKE VARCHAR2(256) NOT NULL,

  MODEL VARCHAR2(256),

  REGISTRATION_NO NUMBER(15) NOT NULL primary key,

  AGE NUMBER(2,1) NOT NULL,

  CATEGORY VARCHAR(1) NOT NULL,

  MILAGE NUMBER(15,2) NOT NULL,

  LAST_SERVICE_DATE DATE NOT NULL

  );

  2、插入数据

  可以用入下存储过程进行批量数据的插入,

  create or replace PROCEDURE INSERT_APPOINTED_RECORDS

  ( startNum IN NUMBER, endNum IN NUMBER) AS

  i number:=startNum;

  j number:=endNum;

  BEGIN

  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') );

  While i<=j Loop

  INSERT INTO

  VEHICLE (REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATE)

  VALUES

  (i,'test','test',3,'A',1000,SYSDATE);

  i:=i+1;

  End Loop;

  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') );

  END INSERT_APPOINTED_RECORDS;

  3、查询固定行数的记录

  在Oracle数据库中需要结合ROWNUM来完成,可以用如下方法来实现,如要取按ROWID排序的5000到10000之间的记录

  SELECT * FROM vehicle WHERE ROWNUM<10001 minus SELECT * FROM vehicle WHERE ROWNUM<5001;

  如果需要按照某字段排序来查询,如,按制造商Make来排序,就需要用到子查询,性能就会有明显的影响

  SELECT * from (SELECT * FROM vehicle order by make) WHERE ROWNUM<10001 minus SELECT * from (SELECT * FROM vehicle order by make) WHERE ROWNUM<5001;

  由于你对ROWNUM不能用像 Where rownum >10 and rownum <100这样的语法,所以有点别扭,但是你可以通过以下方式来用:

  select * from (select rownum r,REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATE from vehicle) where r >=5000 and r<=10000;

  或者

  select * from (select rownum r,REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATE from vehicle) where r between 5000 and 10000;

  这样就比较合符习惯了,不能用如下语句:

  select * from (select * from vehicle order by make) where rownum between 5000 and 10000;

  或者

  select * from (select * from vehicle order by make) where rownum >= 5000 and rownum<=10000;

查找更多相关信息请登陆:考资网(www.kaozi.com)

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于本站 - 广告服务 - 站内导航 - 网站声明 - 友情链接 - 联系我们
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司 版权所有

    鄂ICP备05000022号