Il existe trois manières potentielles de contourner cette limite :
1) Comme vous l'avez déjà mentionné :divisez la déclaration en lots de 1000
2) Créez une table dérivée en utilisant les valeurs, puis joignez-les :
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);
alternativement, vous pouvez également joindre ces valeurs - peut-être même plus rapidement :
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;
Cela génère toujours une déclaration vraiment, vraiment énorme, mais n'a pas la limite de 1000 identifiants. Cependant, je ne sais pas à quelle vitesse Oracle analysera cela.
3) Insérez les valeurs dans une table temporaire (globale) puis utilisez un IN
clause (ou une clause JOIN
). Ce sera probablement la solution la plus rapide.