分页使用Oracle

20 浏览
0 Comments

分页使用Oracle

我对Oracle并不像我想象的那么熟悉。我有大约250k条记录,我想要每页显示100条记录。当前,我有一个存储过程,使用数据适配器、数据集和dataadapter.Fill(dataset)方法将所有25万条记录检索到数据集中。如果我有“页码”和“每页记录数”作为整数值,我可以将它们作为参数传递,那么获取只有那一部分记录的最佳方法是什么?例如,如果我传递10作为页码,120作为页数,从select语句中将给我第1880个至第2000个记录之间的内容,或者类似的,我在脑海中的计算可能有误。

我在.NET和C#中执行此操作,但这不重要,如果我可以在sql这方面搞定,那么我就很棒了。

更新:我能够使用Brian的建议,并且它运作得很好。我想要进行一些优化,但是页面的出现时间已经从一分钟减少到了4到5秒,而且我的分页控件可以很好地与我的新存储过程相结合。

admin 更改状态以发布 2023年5月24日
0
0 Comments

Ask Tom关于分页和非常有用的分析函数。

这是页面的摘录:

select * from (
    select /*+ first_rows(25) */
     object_id,object_name,
     row_number() over
    (order by object_id) rn
    from all_objects
)
where rn between :n and :m
order by rn;

0
0 Comments

像这样的东西应该管用:Frans Bouma的博客

SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
        ORDER BY OrderDate DESC, ShippingDate DESC
    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)

0