主要针对如何在将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找到要显示的当前页数据