fetch-clause

fetch-clause は、検索できる最大行数を設定します。

Read syntax diagramSkip visual syntax diagram FETCH NEXT 1fetch-row-count ROWROWS ONLY

fetch-clause は、検索できる最大行数を設定します。 この節を使用して、中間結果表の行数に関係なく、fetch-row-count 行までしか取得しないようにアプリケーションが設計されていることをデータベース・マネージャーに伝えます。 fetch-row-count 行より多くの行を取り出そうとすると、通常のデータの終わりと同じように処理されます。

取得される行のセットが予測どおりのセットになるように、中間結果表の各行のソート順序を一意的に決定するソート・キーを ORDER BY 節で指定する必要があります。 中間結果表で、一部の行のソート・キーが重複している場合、それらの行の順序は確定されません。 ORDER BY 節がない場合、中間結果表の順序は確定されません。 中間結果表の順序が確定的でない場合、取得される行のセットを予測することはできません。

フェッチ行カウント (fetch-row-count)
取得する行の最大数を指定する式。 式には、列参照、スカラー全選択、決定論的ではない関数、外部アクションを持つ関数、またはシーケンス参照を含めることはできません (SQLSTATE 428H7)。 その数値は、正数またはゼロでなければなりません (SQLSTATE 2201W)。 式のデータ・タイプが BIGINT でない場合は、式の結果が BIGINT 値にキャストされます。 fetch-row-count を省略すると、1 に相当します。
長精度整数以下の定数を fetch-row-count に指定して fetch-clause を使用すると、副選択または全選択の照会の最適化に影響を与えます。 照会の最適化に対するこの影響は、取得行数が最大でも既知の数である、という事実に基づきます。 以下の節が指定されている場合、データベース・マネージャーは optimize-for-clauseinteger を使用して、最外部の全選択の照会の最適化に影響を与えます。
  • fetch-clause が最外部の全選択で指定されている
  • optimize-for-clause が SELECT ステートメントで指定されている

結果表を指定の行数に限定することで、パフォーマンスが向上します。 場合によっては、データベース・マネージャーは、指定された行数を決定した後に照会の処理を停止します。 offset-row-count に定数を指定して offset-clause も指定した場合は、処理の停止を決定するときに、その定数のオフセットの値も考慮されます。

全選択に FROM 節の SQL データ変更ステートメントが入っている場合は、 フェッチされる行の数の限度に関係なく、すべての行が変更されます。

  • キーワード FIRST とキーワード NEXT は、同じ意味で使用されます。 結果は変わりませんが、offset-clause を使用する場合は、キーワード NEXT を使用したほうが読みやすくなります。
  • キーワード ROW と ROWS は交換可能です。 どちらを使用しても同じ結果になりますが、1 以外の行数を指定する場合は、ROWS のほうが読みやすくなります。
  • 代替構文: 他のデータベース製品で使用される SQL との互換性のために、以下がサポートされています。 これらの代替は非標準であり、使用すべきではありません。
    表 1. 代替構文
    代替構文 同等の構文
    制限 x FETCH FIRST x ROWS のみ
    LIMIT x オフセット y オフセット y ROWS FETCH NEXT x ROWS のみ
    LIMIT yx オフセット y ROWS FETCH NEXT x ROWS のみ