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

Apakah implementasi ini sesuai dengan SQL-92?

Tidak, perlakuan Oracle terhadap null adalah istimewa, berbeda dari orang lain, dan tidak konsisten dengan standar ANSI. Namun dalam pembelaan Oracle, hal itu mungkin menetap dan berkomitmen untuk perlakuan ini jauh sebelum ada standar ANSI yang harus konsisten!

Semuanya dimulai dari fakta bahwa Oracle menyimpan string dengan jumlah karakter diikuti oleh data string. NULL diwakili oleh jumlah karakter nol tanpa data string berikut - yang persis sama dengan string kosong (''). Oracle tidak memiliki cara untuk membedakannya.

Ini mengarah pada beberapa perilaku unik, seperti kasus rangkaian ini. Oracle juga memiliki fungsi LENGTH untuk mengembalikan panjang string, tetapi ini telah didefinisikan dengan cara yang berlawanan, sehingga LENGTH('') mengembalikan NULL bukan nol. Jadi:

LENGTH('abc') + LENGTH('') IS NULL

LENGTH('abc' || '') = 3

yang menurut saya melanggar prinsip matematika dasar.

Tentu saja, pengembang Oracle menjadi begitu terbiasa dengan hal ini sehingga banyak dari kita bahkan tidak dapat melihat ada yang salah atau aneh tentang hal itu - beberapa bahkan akan berpendapat bahwa seluruh dunia salah dan bahwa string kosong dan NULL adalah hal yang sama!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara meneruskan nilai ke operator IN secara dinamis?

  2. Oracle Run Procedure dengan satu parameter masuk dan beberapa parameter keluar

  3. Oracle INSERT Jalur Langsung

  4. PLS-00103:Menemukan simbol CREATE

  5. Oracle memindahkan kolom ke posisi pertama