Existem três maneiras possíveis de contornar esse limite:
1) Como você já mencionou:divida o extrato em lotes de 1000
2) Crie uma tabela derivada usando os valores e depois una-os:
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);
alternativamente, você também pode juntar esses valores - pode até ser mais rápido:
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;
Isso ainda gera uma declaração muito, muito grande, mas não tem o limite de 1000 ids. Não tenho certeza de quão rápido o Oracle analisará isso.
3) Insira os valores em uma tabela temporária (global) e use um
IN
cláusula (ou um JOIN
). Esta provavelmente será a solução mais rápida.