Có ba cách tiềm năng xung quanh giới hạn này:
1) Như bạn đã đề cập:chia câu lệnh thành các lô 1000
2) Tạo một bảng dẫn xuất bằng cách sử dụng các giá trị và sau đó nối chúng:
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);
cách khác, bạn cũng có thể nối các giá trị đó - thậm chí có thể nhanh hơn:
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;
Điều này vẫn tạo ra một tuyên bố thực sự, rất lớn, nhưng không có giới hạn 1000 id. Tôi không chắc Oracle sẽ phân tích cú pháp này nhanh như thế nào.
3) Chèn các giá trị vào bảng tạm thời (toàn cục) và sau đó sử dụng IN
mệnh đề (hoặc JOIN
). Đây có lẽ sẽ là giải pháp nhanh nhất.