我对 Oracle 的了解并不如我所愿。我有大约 250k 条记录,我想每页显示 100 条。目前,我有一个存储过程,它使用数据适配器、数据集以及存储过程结果上的 dataadapter.Fill(dataset) 方法将所有 25 万条记录检索到数据集。如果我将“页码”和“每页记录数”作为整数值,我可以作为参数传递,那么返回该特定部分的最佳方法是什么。比如说,如果我传递 10 作为页码,120 作为页数,那么从 select 语句中,它会给我第 1880 到 1200 个,或者类似的东西,我脑子里的数学可能会出错。
我在 .NET 中使用 C# 执行此操作,认为这并不重要,如果我可以在 sql 方面正确执行此操作,那么我应该很酷。
更新:我能够使用布莱恩的建议,而且效果很好。我想进行一些优化,但页面会在 4 到 5 秒而不是一分钟内出现,而且我的分页控件能够与我的新存储过程很好地集成。
像这样的东西应该有效:来自 Frans Bouma 的博客 http://weblogs.asp.net/fbouma/archive/2007/05/21/api-s-and-production-code-shouldn-t-be-designed-by-scientists.aspx
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)