Der er tre mulige måder at omgå denne grænse på:
1) Som du allerede har nævnt:del opgørelsen op i batches af 1000
2) Opret en afledt tabel ved hjælp af værdierne og foren derefter dem:
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);
alternativt kan du også tilslutte dig disse værdier - måske endda hurtigere:
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;
Dette genererer stadig en virkelig, virkelig stor erklæring, men har ikke grænsen på 1000 id'er. Jeg er dog ikke sikker på, hvor hurtigt Oracle vil analysere dette.
3) Indsæt værdierne i en (global) midlertidig tabel, og brug derefter en IN
klausul (eller en JOIN
). Dette vil sandsynligvis være den hurtigste løsning.