小编典典

使用Oracle分页

sql

我不像我想的那样熟悉Oracle。我有大约25万条记录,我希望每页显示100条。当前,我有一个存储过程,该过程使用数据适配器和数据集以及对存储过程结果的dataadapter.Fill(dataset)方法将一百万个记录的全部四分之一检索到数据集中。如果我可以将“页码”和“每页记录数”作为整数值,可以将其作为参数传递,那么最好的方法就是只获取该特定部分。假设,如果我将10作为页数传递,将120作为页数传递,则从select语句中获得的数值将是1880至1200,或者类似的数字,我的脑海中可能已经关闭。

我正在用C#在.NET中进行此操作,认为这并不重要,如果我可以在sql端正确使用它,那么我应该很酷。

更新:我能够使用Brian的建议,而且效果很好。我想进行一些优化,但是页面将​​在4到5秒而不是一分钟的时间内显示出来,并且我的分页控件能够很好地集成到我的新存储过程中。


阅读 162

收藏
2021-05-05

共1个答案

小编典典

这样的事情应该起作用:来自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)
2021-05-05