Istnieją trzy potencjalne sposoby obejścia tego limitu:
1) Jak już wspomniałeś:podziel wyciąg na partie po 1000
2) Utwórz tabelę pochodną, używając wartości, a następnie połącz je:
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);
alternatywnie możesz również połączyć te wartości - może być nawet szybciej:
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;
To wciąż generuje naprawdę, naprawdę duże zestawienie, ale nie ma limitu 1000 identyfikatorów. Nie jestem jednak pewien, jak szybko Oracle to przeanalizuje.
3) Wstaw wartości do (globalnej) tabeli tymczasowej, a następnie użyj IN
klauzula (lub JOIN
). To prawdopodobnie będzie najszybsze rozwiązanie.