Det finns tre möjliga sätt att komma runt denna gräns:
1) Som du redan har nämnt:dela upp uttalandet i batcher om 1000
2) Skapa en härledd tabell med hjälp av värdena och sammanfoga dem sedan:
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 också gå med i dessa värden - kanske till och med vara snabbare:
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;
Detta genererar fortfarande ett riktigt, riktigt stort uttalande, men har inte gränsen på 1000 id. Jag är dock inte säker på hur snabbt Oracle kommer att analysera detta.
3) Infoga värdena i en (global) temporär tabell och använd sedan en IN
klausul (eller en JOIN
). Detta kommer förmodligen att vara den snabbaste lösningen.