Има три възможни начина за заобикаляне на това ограничение:
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;
Това все още генерира наистина, наистина огромно изявление, но няма ограничението от 1000 идентификатора. Не съм сигурен обаче колко бързо Oracle ще анализира това.
3) Вмъкнете стойностите в (глобална) временна таблица и след това използвайте IN
клауза (или JOIN
). Това вероятно ще бъде най-бързото решение.