概要
OracleのSELECT結果をそのまま画面表示。
さらに取得結果が〇レコード超えていたら警告。
といったことをしたい。
2回SELECTしたり、アプリケーション内でレコード数カウントせずに、1回のSQLでやりたい。
やり方
COUNT(*) OVER()
で『レコード数のカラム』を用意できる。
サンプルSQL
SELECT
COUNT(*) OVER() AS record_count,
テーブル名.*
FROM テーブル名
COUNT(*)
だけだと結果が1レコードだけになってしまい、『データと同時に』が満たせない。
OVER()
を付けてあげることでその条件を満たせる。
WHEREで絞り込んだ結果に対するレコード数なので注意
例えば下記の場合、テーブル名のレコード数が999でも『record_count』の値は100。
(999ではない)
SELECT
COUNT(*) OVER() AS record_count,
テーブル名.*
FROM テーブル名
WHERE ROWNUM <= 100
行数を絞り込みしつつ、『絞り込みしなかった場合のレコード数』を取得したい場合はサブクエリを使う。
参考サイトさん
バージョン
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
TODO:MAX(ROWNUM) OVER()でも実現可能だが、どの方法が一番処理軽い?