我不像我想的那样熟悉Oracle。我有大约25万条记录,我希望每页显示100条。当前,我有一个存储过程,该过程使用数据适配器和数据集以及对存储过程结果的dataadapter.Fill(dataset)方法将一百万个记录的全部四分之一检索到数据集中。如果我可以将“页码”和“每页记录数”作为整数值,可以将其作为参数传递,那么最好的方法就是只获取该特定部分。假设,如果我将10作为页数传递,将120作为页数传递,则从select语句中获得的数值将是1880至1200,或者类似的数字,我的脑海中可能已经关闭。
我正在用C#在.NET中进行此操作,认为这并不重要,如果我可以在sql端正确使用它,那么我应该很酷。
更新:我能够使用Brian的建议,而且效果很好。我想进行一些优化,但是页面将在4到5秒而不是一分钟的时间内显示出来,并且我的分页控件能够很好地集成到我的新存储过程中。
这样的事情应该起作用:来自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)