Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách giải quyết ORA-01795 trong mã Java

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SEC_CASE_SENSTIVE_LOGON trong 12c

  2. c # select truy vấn đến cơ sở dữ liệu Oracle ném Ánh xạ loại tùy chỉnh cho ... không được chỉ định hoặc không hợp lệ

  3. Làm cách nào để đếm số cột trong bảng bằng SQL?

  4. Băm nhanh hơn với ít va chạm hơn?

  5. Phương pháp thu thập:Các hàm trước &sau trong cơ sở dữ liệu Oracle