この制限を回避するには、次の3つの方法が考えられます。
1)すでに述べたように、ステートメントを1000のバッチに分割します
2)値を使用して派生テーブルを作成し、それらを結合します。
with id_list (id) as (
select 'V1' from dual union all
select 'V2' from dual union all
select 'V3' from dual
)
select *
from the_table
where column_name in (select id from id_list);
あるいは、これらの値を結合することもできます-さらに高速になる可能性があります:
with id_list (id) as (
select 'V1' from dual union all
select 'V2' from dual union all
select 'V3' from dual
)
select t.*
from the_table t
join id_list l on t.column_name = l.id;
これはまだ本当に、本当に巨大なステートメントを生成しますが、1000IDの制限はありません。 Oracleがこれをどれだけ速く解析するかはわかりません。
3)値を(グローバル)一時テーブルに挿入してから、IN
を使用します 句(またはJOIN
)。これはおそらく最速の解決策になるでしょう。