Oracle取固定记录数的方法应该如何实现呢?这是很多人都提到过的问题,下面就为您详细介绍Oracle取固定记录数的实现方法步骤,希望对您能有所帮助。

在实际应用中,为了分页或查询性能的需要,我们往往需要从数据库查询固定行数的记录,不同的数据库有不同的SQL语句来完成,在Oracle数据库中,可以用以下方法来实现Oracle取固定记录数,假设我们要从一个有百万条记录的表中每次取10万条进行处理,可以按如下步骤进行:

1、创建表

    DropTABLEVEHICLE; CreateTABLEVEHICLE( MAKEVARCHAR2(256)NOTNULL, MODELVARCHAR2(256), REGISTRATION_NONUMBER(15)NOTNULLprimarykey, AGENUMBER(2,1)NOTNULL, CATEGORYVARCHAR(1)NOTNULL, MILAGENUMBER(15,2)NOTNULL, LAST_SERVICE_DATEDATENOTNULL );

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

    createorreplacePROCEDUREINSERT_APPOINTED_RECORDS (startNumINNUMBER,endNumINNUMBER)AS inumber:=startNum; jnumber:=endNum; BEGIN dbms_output.put_line(to_char(sysdate,'yyyy-mm-ddhh24:mi:ss')); Whilei<=jLoop INSERTINTO VEHICLE(REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATE) VALUES (i,'test','test',3,'A',1000,SYSDATE); ii:=i+1; EndLoop; dbms_output.put_line(to_char(sysdate,'yyyy-mm-ddhh24:mi:ss')); ENDINSERT_APPOINTED_RECORDS;

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

    SELECT*FROMvehicleWHEREROWNUM<10001minusSELECT*FROMvehicleWHEREROWNUM<5001;

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

    SELECT*from(SELECT*FROMvehicleorderbymake)WHEREROWNUM<10001minusSELECT*from(SELECT*FROMvehicleorderbymake)WHEREROWNUM<5001;

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

    select*from(selectrownumr,REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATEfromvehicle)wherer>=5000andr<=10000;

或者

    select*from(selectrownumr,REGISTRATION_NO,MAKE,MODEL,AGE,CATEGORY,MILAGE,LAST_SERVICE_DATEfromvehicle)whererbetween5000and10000;

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

    select*from(select*fromvehicleorderbymake)whererownumbetween5000and10000;

或者

    select*from(select*fromvehicleorderbymake)whererownum>=5000andrownum<=10000;

【编辑推荐】

深入解读Oracle修改表结构

带您了解Oracle数据库的段

Linux下的Oracle启动脚本

带您了解Oracle启动参数

Oracle转换函数一览