Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa klausa Oracle IN memiliki batas 1000 hanya untuk data statis?

Ini adalah batasan pada daftar ekspresi apa pun:

Daftar ekspresi yang dipisahkan koma tidak boleh berisi lebih dari 1000 ekspresi.

Mengapa 1000? Agaknya implementasinya membutuhkan semacam batasan, dan itu mungkin tampak lebih dari cukup. Mungkin ada, atau tentu saja, ketika batas itu ditetapkan beberapa dekade yang lalu, alasan kinerja untuk batas juga, terutama karena IN dikonversi ke beberapa OR pernyataan oleh pengoptimal dalam kasus ini (yang dapat Anda lihat jika Anda melihat rencana eksekusi).

Saya akan berjuang untuk membuat skenario yang masuk akal yang diperlukan untuk mendekati itu, dengan nilai tetap yang tidak dapat diturunkan dari data lain sebagai subquery.

Saya menduga ini agak terkait dengan batas basis data logis yang mengatakan Anda tidak dapat memiliki lebih dari 1000 kolom dalam sebuah tabel, misalnya; karena daftar ekspresi digunakan dalam pernyataan penyisipan untuk mencantumkan kolom dan nilai yang disisipkan, daftar ekspresi harus dapat mencocokkannya, tetapi mungkin tidak memiliki alasan untuk melebihinya.

Spekulasi tentu saja... tanpa melihat bagian dalam perangkat lunak, Anda tidak mungkin mendapatkan jawaban yang pasti.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara kelas driver Oracle jdbc?

  2. Membalikkan String Kata demi Kata menggunakan SQL

  3. Menginstal Oracle Fusion Middleware / WebLogic Server 11g

  4. Bagaimana Cara Menghasilkan Paket Tabel API di Oracle SQL Developer?

  5. Contoh String dan Angka Oracle Concatenate