SQL IN句に1000件以上要素を指定したときのエラーの対処法
SQL
のIN
句に1000件以上指定すると以下のエラーが発生してしまいます。
エラー
ORA-01795: リストに指定できる式の最大数は1000です。
エラーになってしまうSQL例
SELECT T1.社員名
FROM 社員マスタ T1
WHERE T1.社員コード IN (1,2,3,4, ... 999,1000,1001) --IN句の中で1000個以上指定
SQL IN句をEXISTS句に変換する方法で紹介したように、EXISTS句に書き換えられる場合は書き換えてしまうのが一番簡単な対処法ですが、例えばIN
句の中身が定数だったして、どうしてもIN
句を使わなければならない場合は、1000件ずつOR
条件で区切って指定する方法があります。
SELECT T1.社員名
FROM 社員マスタ T1
WHERE
--OR条件で1000件ずつ区切って指定する
T1.社員コード IN (1,2,3, ... 999,1000) --1000個だけ指定
OR
T1.社員コード IN (1001,1002,1003, ... 1999,2000) --1000個だけ指定
他の対処法として、1000件だけ取得するSQLを複数回実行するようにすることなどがあります。コーディングの手間やパフォーマンスを考慮するとSQL
は分けてしまうのが一番無難かもしれません。