Oracleによるページング 質問する

Oracleによるページング 質問する

私は 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)

おすすめ記事