私は Oracle にあまり詳しくありません。25 万件のレコードがあり、1 ページあたり 100 件表示したいと考えています。現在、データ アダプター、データセット、およびストアド プロシージャの結果に対する dataadapter.Fill(dataset) メソッドを使用して、データセットに 25 万件のレコードすべてを取得するストアド プロシージャが 1 つあります。パラメーターとして渡すことができる整数値として「ページ番号」と「ページあたりのレコード数」がある場合、その特定のセクションだけを取得する最適な方法は何でしょうか。たとえば、ページ番号として 10 を渡し、ページ数として 120 を渡すと、SELECT ステートメントから 1880 番目から 1200 番目などが表示されますが、私の計算が間違っている可能性があります。
私はこれを C# を使って .NET で実行していますが、それは重要ではありません。SQL 側で正しく実行できれば、それで問題ないはずです。
更新: Brian の提案を利用することができ、うまく機能しています。最適化に取り組みたいのですが、ページは 1 分ではなく 4 ~ 5 秒で表示され、ページング コントロールは新しいストアド プロシージャと非常にうまく統合できました。
ベストアンサー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)