LNNVL, FALSE veya UNKNOWN olarak değerlendirilen koşullar için TRUE değerini döndüren ve TRUE olarak değerlendirilen koşullar için FALSE değerini döndüren işlevde yerleşik bir köledir . Sorum şu: NULL değerlerle uğraşmak yerine gerçek durumun tersini döndürmenin faydası ne olacak?
Örneğin, nulls içerebilecek StartCommission ve CurrentCommission sütunlarına sahip bir Emp tablonuz olduğunu varsayalım. Aşağıdakiler yalnızca null değeri olmayan satırları döndürür:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
Her iki komisyonun da boş olduğu satırları dahil etmek istiyorsanız, şöyle bir şey yapabilirsiniz:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
Bu sözdizimini kısaltmak için bir işlev varmış gibi görünebilir, ancak LNNVL kullanmak eşit olmayan tüm kayıtları ve boş olan tüm kayıtları döndürür.
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
Buna NOT DEĞİL eklenirse yalnızca boş olmayan satırlar döndürülür. Bana öyle geliyor ki, bu durum için istenen işlevsellik gerçek koşulları doğru, yanlış koşulları yanlış tutmak ve bilinmeyen koşulların doğru olduğunu değerlendirmek olacaktır. Burada gerçekten düşük kullanımlı bir vaka mı oluşturdum? Bilinmeyeni doğruya, doğruyı yanlışa ve yanlışı doğruya çevirmek gerçekten daha olası mı?
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);