您的位置:首页 > 其它

利用Rownum对数据按GridView 的PageSize进行划分,为分页显示做准备

2008-11-14 16:24 239 查看
主要针对如何在将GridView中显示的数据分页显示,

假设Table A,使用的Sql Statement如下:

with T as (

select rownum RN, UserID, UserName, DeptNo, DeptNoDescr from A

)

SELECT *
FROM ( SELECT *
FROM T WHERE RN < '本页最后一笔数据的rowNum+1' and rn > '上页最后一笔数据的rowNum' order by RN)

PS:

SELECT * FROM T

WHERE RN < '本页最后一笔数据的rowNum+1' and rn > '上页最后一笔数据的rowNum'

order by RN

这里有一个小小的问题, 即若table T 中的数据量特别大的时候, 内查询的分页查询就显得特别的慢! 对这样的情况我暂时也没有什么特别好的方案, 希望网友可以提出建议以供小弟参考...

当前的页(CurrentPage), 每页显示的记录数(PageSize);每次当User换页是只要计算出本页最后一个记录的RowNum以及上页最后一个记录的RowNum,请注意RowNum 是个很奇怪的Oracle table 属性,

假如你要查某个table B的前10项数据,应该这样:

select * from (select * from B order by userID ) where RowNum <10

因为Oracle在检索的时候,会首先把数据都检索出来,然后在排序段中进行排序,假如你这样做:SELECT * from B where rowNum <'11 order by UserID,

在检索的时候,会首先把数据检索出来,也就是把B表数据都检索出来,然后再Order by排序操作。因为ROWNUM 数据是在排序前就检索出来的了,所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作呢。其实很简单,利用子查询,先排序,再取ROWNUM。/

select * from (select * from B order by userID ) where RowNum <10,

先写到这里,以后待做到分页控件都再直接用这样的Sql,每次去DB找到要显示的当前页数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: