1. ホーム
  2. sql

[解決済み] オラクルによるページング

2022-05-13 08:51:50

質問

私はOracleにあまり詳しくありません。 25万件のレコードがあり、1ページあたり100件表示させたいと思っています。 現在、私はデータアダプタとデータセットを使用してデータセットに25万件のすべてのレコードを取得する1つのストアドプロシージャを持っており、データアダプタはストアドプロシージャからの結果に対してFill(dataset)メソッドを実行します。 パラメータとして渡すことができる整数値として、"ページ番号" と "ページあたりのレコード数" がある場合、その特定のセクションだけを取得する最良の方法は何でしょうか。 例えば、ページ番号として10を、ページ数として120を渡すと、select文から1880番目から1200番目までが得られるとか、そんな感じですが、頭の中の計算が狂っているかもしれません。

私はこれをC#の.NETでやっていますが、それは重要ではなく、SQL側でそれを正しく行うことができれば、私はクールであるべきだと思いました。

更新: Brian の提案を使用することができ、それは素晴らしい動作をしています。 いくつかの最適化に取り組みたいと思いますが、ページは 1 分ではなく 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)