1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OracleでSELECT時にデータと同時にレコード数も取得

Posted at

概要

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()でも実現可能だが、どの方法が一番処理軽い?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?