为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle中取固定记录数的方法

标签:
Oracle


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

 

©著作权归作者所有:来自51CTO博客作者callme的原创作品,如需转载,请注明出处,否则将追究法律责任

Oracle查询数据库


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消