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

Tại sao mệnh đề IN oracle chỉ có giới hạn 1000 đối với dữ liệu tĩnh?

Đó là một hạn chế đối với bất kỳ danh sách biểu thức nào:

Danh sách các biểu thức được phân tách bằng dấu phẩy không được chứa nhiều hơn 1000 biểu thức.

Tại sao lại là 1000? Có lẽ việc triển khai cần một số loại giới hạn, và điều đó có lẽ là quá đủ. Có thể có, hoặc chắc chắn có thể đã có khi giới hạn đó được đặt cách đây nhiều thập kỷ, một lý do hiệu suất cho giới hạn, đặc biệt là IN được chuyển đổi thành nhiều OR tuyên bố của người tối ưu hóa trong trường hợp này (bạn có thể thấy nếu nhìn vào kế hoạch thực hiện).

Tôi cố gắng nghĩ ra một kịch bản hợp lý cần thiết để đến được bất kỳ đâu gần đó, với các giá trị cố định không thể lấy từ dữ liệu khác dưới dạng truy vấn con.

Tôi nghi ngờ nó phần nào liên quan đến các giới hạn cơ sở dữ liệu lôgic, ví dụ như bạn không thể có nhiều hơn 1000 cột trong một bảng; vì danh sách biểu thức được sử dụng trong câu lệnh chèn để liệt kê cả cột và giá trị đang được chèn, nên danh sách biểu thức phải có thể khớp với danh sách đó, nhưng có thể không có lý do gì để vượt quá nó.

Tất nhiên là suy đoán ... mà không nhìn thấy nội dung bên trong của phần mềm, bạn khó có thể nhận được câu trả lời chính xác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để liệt kê tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu Oracle

  2. C #:Chuyển một kiểu do người dùng xác định vào một thủ tục được lưu trữ Oracle

  3. Làm cách nào để đặt đúng biến ORACLE_HOME trên Ubuntu 9.x?

  4. 2 cách trả về hàng chỉ chứa các ký tự không phải chữ và số trong Oracle

  5. Biểu mẫu Oracle trong R12 / R12.2