Oracle では、返される行の正確な数を計算するために、いつでも分析関数に頼ることができます。これはそのようなクエリの例です:
SELECT inner.*, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
FROM (
[... your own, sorted search query ...]
) inner
これにより、特定のサブクエリの合計行数が得られます。ページングも適用する場合は、これらの SQL 部分を次のようにさらにラップできます。
SELECT outer.* FROM (
SELECT * FROM (
SELECT inner.*,ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
FROM (
[... your own, sorted search query ...]
) inner
)
WHERE ROWNUM < :max_row
) outer
WHERE outer.RNUM > :min_row
min_row
とmax_row
を意味のある値に置き換えます。ただし、インデックスを使用してフィルタリングしていない場合、またはインデックスに対して比較的狭い操作を行っている場合、正確な行数を計算するとコストがかかる可能性があることに注意してください。詳細については、こちらを参照してください: Oracle でのページ クエリの速度UNIQUE SCAN
RANGE SCAN
5000
他の人が言ったように、フィルターを使用してクエリに絶対的な上限を設定し、ROWNUM <= 5000
それ以上の5000+
結果があることを示すことができます。ROWNUM
フィルタリングを適用すると、Oracle はクエリの最適化に非常に優れていることに注意してください。ここでその件に関する情報を見つけてください:
http://www.dba-oracle.com/t_sql_tuning_rownum_equals_one.htm