以下のように表示されます。
(日本語)
ORA-01795: リストに指定できる式の最大数は1000です。
(英語)
ORA-01795: maximum number of expressions in a list is 1000 error
発生パターン
このエラーは以下のような場合に発生します。
- IN句に値を1001個以上指定した
- エラー例
- SQL> SELECT * FROM mst_shohin WHERE shohincd IN (1,2,3 ... 999,1000,1001) / WHERE shohincd IN (1,2,3 ... 999,1000,1001) * 行2でエラーが発生しました。: ORA-01795: リストに指定できる式の最大数は1000です。
(1,2,3 ... 999,1000,1001)の箇所は、1~1001まで値が1001個指定してあると読み替えてください。
対処法
- IN句に指定する値の個数を1000個以下にする
- 可能であれば、EXIST句に書き換える
対処法1)IN句の値を1000個以下にする
- SQL*Plus
- SQL> SELECT * FROM mst_shohin WHERE shohincd IN (1,2,3 ... 999,1000) /
(1,2,3 ... 999,1000) の箇所は、1~1000まで値が1000個指定してあると読み替えてください。
対処法2)IN句の値を1000個以下で分割する
- SQL*Plus
- SQL> SELECT * FROM mst_shohin WHERE shohincd IN (1,2,3 ... 999,1000) OR shohincd IN (1001,1002 ... 1999,2000) /
(1,2,3 ... 999,1000)、(1001,1002 ... 1999,2000) の箇所は、それぞれ値が1000個指定してあると読み替えてください。
対処法3)EXIST句に書き換える
値が他のテーブルに存在する場合に使用できます。
EXIST句については以下記事をご覧ください。
→ [SQL] 副問い合わせの結果が存在する場合のみ検索対象とする(EXISTS)
備考
- オラクルのIN句に指定できる値は最大1000個という制約があるので、必ず1000個以下にしなければなりません。
- これは絶対的な制約なので、場合によってはプログラムの設計から変える必要があります。