翔宇的blog.....

技术文摘,开发手记,翔宇……

Oracle中使用SQL进行分页的语句、方法,简单易用,呵呵……

     看了不少分页方面的文章,感觉还是直接使用SQL来的简单直接,就简单研究了一下……regular_smile.gif
不过,鄙人Oracle数据库方面的知识实在有限,有什么不对之处还请多多指教,效率嘛,不知道怎么测,俺只管好用就行了……red_smile.gif
     小经验:
     select * from tablename where rownum>10 and rownum<20
     像这样的语句是不对的,oracle认为条件不成立,至于为什么这么弱智,俺也不知道……
     rownum只可以用<=来操作,不可以用>=
     select * from tablename where rownum<20
     minus
     select * from tablename where rownum<10
     这样也能达到分页的目的,不过不支持LONG字段,所以还是用下面的吧……
--------------------------------------------------------------------------------------
方法1,据说效率较高
select * from (select rownum idd,t.* from (select * from gsdtlongtest order by id desc) t
where rownum<20) tt where tt.idd>10

select * from (select rownum idd,t.* from (select * from gsdtlongtest order by id desc) t
where rownum<end) tt where tt.idd>start


curpage 当前页
pagenum 每页显示条数

start=(curpage-1)*pagenum
end=start+pagenum+1

最后一页如果不足pagenum无所谓
--------------------------------------------------------------------------------------
方法2(43条记录,每页20条,第2页):
select * from (select * from gsdtlongtest where rownum<=23)
where id not in(select id from gsdtlongtest where rownum<=3) order by id desc

select * from (select * from gsdtlongtest where rownum<=start)
where id not in(select id from gsdtlongtest where rownum<=end) order by id desc

 

start=total-(curpage-1)*pagenum
end=start-pagenum+1

注意:为了减少子查询数,直接按照默认的数据库记录顺序进行分页计算。主键id顺序增加,最新纪录为表中最后一条记录。效率不知道怎么样……

---------------------------------------------------------------------------------------

阅读更多
文章标签: oracle sql 数据库
个人分类: Oracle
上一篇JDBC的高级应用一 ——关于数据库连结
下一篇Stored Procedure(存储过程)编写经验和优化措施
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭