LNNVL adalah fungsi bawaan oracle yang mengembalikan TRUE untuk kondisi yang mengevaluasi ke FALSE atau UNKNOWN, dan mengembalikan FALSE untuk kondisi yang mengevaluasi ke TRUE. Pertanyaan saya adalah apa untungnya mengembalikan kebalikan dari kondisi kebenaran daripada hanya menangani nilai-nilai NULL?
Misalnya, anggap Anda memiliki tabel Emp dengan kolom StartCommission dan CurrentCommission yang mungkin berisi nol. Berikut ini hanya baris yang tidak memiliki nilai nol:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
Jika Anda ingin memasukkan baris di mana salah satu komisi nol, Anda bisa melakukan sesuatu seperti ini:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
Tampaknya ada fungsi untuk mempersingkat sintaks ini, tetapi menggunakan LNNVL mengembalikan semua catatan yang tidak sama dan semua catatan dengan nol.
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
Menambahkan TIDAK ke ini hanya mengembalikan baris tanpa nol. Tampak bagi saya bahwa fungsi yang diinginkan untuk kasus ini adalah untuk menjaga kondisi true true, kondisi false salah, dan kondisi yang tidak diketahui mengevaluasi ke true. Apakah saya benar-benar membuat kasus penggunaan rendah di sini? Apakah benar-benar lebih mungkin ingin mengubah yang tidak diketahui menjadi benar, benar menjadi salah, dan salah menjadi benar?
create table emp (StartCommission Number(3,2), CurrentCommission Number(3,2));
insert into emp values (null,null);
insert into emp values (null,.1);
insert into emp values (.2,null);
insert into emp values (.3,.4);