网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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教程,数据库安全,数据库文摘
本月文章推荐
.ResultSetsfromStoredProcedures.
.REDHAT9下安装Oracle9.2.0的成功.
.揭开Oracle 10G手工创建数据库的.
.在sqlplus中操作blob和clob.
.如何使用MS SQL7的REMOTE SERVER.
.SCO UnixWare 7.1.3下安装Oracle.
.新手问几个设置的问题。.
.Linux 硬件稳定性指南,第 2 部分.
.Oracle数据库技术(25).
.Red Hat Linux 7.1使用手册(下).
.请问ORACLE有自增数值型吗?.
.Oracle弥补9i数据库的两个漏洞.
.RED HAT LINUX8.0和oracle数据库.
.学会将SYS_GUID和序列作为主关键.
.如何在oracle存储过程中返回游标.
.Linux From Scratch 的一些心得.
.Oracle数据库日常维护手册.
.细化解析:Oracle使用的hints调整.
.通过Backup Exec实施Oracle灾难恢.
.Oracle诊断案例-Sql_trace之一.

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

发表日期:2008-4-16


在实际的工作和学习中,为了分页或查询性能的需要,往往需要从数据库查询固定行数的记录,不同的数据库有不同的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;

上一篇:实例讲解Ora-12514和Ora-12514解决方法 人气:2391
下一篇:Oracle数据库备份与恢复精华资料集锦 人气:1027
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐