Spring Boot DB連携

OracleのIN句で1000件を超える項目を指定してみた

Oracleデータベースの場合、IN句で1000件を超える項目を指定するとエラーになってしまうので、注意が必要である。

今回は、Spring Bootアプリケーション内でMyBatisフレームワークを利用する状態で、OracleのIN句で1000件の項目を指定した場合と、1000件を超える項目を指定した場合の動作を確認してみたので、共有する。

前提条件

下記記事の実装が完了していること。

MyBatisフレームワーク内で引数のリストからIN句を自動生成してみたSpring Bootアプリケーション内でDBアクセス処理を含む場合に、MyBatisフレームワークを利用することがあるが、foreac...

PL/SQLによるデータ追加

Oracleデータベースに多数のデータを追加するには、PL/SQLブロックを利用すると便利である。user_dataテーブルのデータを削除し、1001件のデータを追加するPL/SQLプログラムの内容は、以下の通り。

データの追加_1

上記PL/SQLプログラムを実行後の、データ数、idの最小・最大値、追加データの一部を確認した結果は、以下の通り。

データの追加_2

データの追加_3

データの追加_4



サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから追加/変更したプログラムである。

application.propertiesの内容は以下の通りで、ログが見にくくなるため、SQLログ出力部分を削除している。

また、Spring Bootのメインクラスの内容は以下の通りで、IN句に1000件のデータを追加しSQLを実行した場合、IN句に1001件のデータを追加しSQLを実行した場合の処理を追加している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-oracle-in-over1000/demo



サンプルプログラムの実行結果

Spring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通り。
サンプルプログラムの実行結果

上記実行結果の青枠部分で、IN句に1000件のデータを追加した場合に正常にSQLが実行されることが、赤枠部分で、IN句に1001件のデータを追加した場合にOracleエラーが発生することが、それぞれ確認できる。

要点まとめ

  • Oracleデータベースの場合、IN句で1000件を超える項目を指定するとエラーになってしまうので、注意が必要である。