LNNVL เป็น oracle ที่มีอยู่แล้วภายในฟังก์ชันที่ส่งคืน TRUE สำหรับเงื่อนไขที่ประเมินเป็น FALSE หรือ UNKNOWN และส่งคืน FALSE สำหรับเงื่อนไขที่ประเมินเป็น TRUE คำถามของฉันคือสิ่งที่จะได้ประโยชน์จากการคืนตรงกันข้ามกับเงื่อนไขความจริงมากกว่าเพียงแค่จัดการค่า NULL?
ตัวอย่างเช่นสมมติว่าคุณมีตาราง Emp พร้อมคอลัมน์ StartCommission และ CurrentCommission ซึ่งอาจมีค่า Null ผลตอบแทนต่อไปนี้เป็นเพียงแถวที่ไม่มีค่าเป็น null:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
หากคุณต้องการรวมแถวที่ค่าคอมมิชชันเป็นโมฆะคุณสามารถทำสิ่งนี้:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
ดูเหมือนว่าฟังก์ชั่นจะมีอยู่เพื่อทำให้ไวยากรณ์สั้นลง แต่การใช้ LNNVL จะส่งกลับระเบียนที่ไม่เท่ากันทั้งหมดและบันทึกทั้งหมดที่มีค่า Null
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
การเพิ่ม NOT ลงในแถวนี้จะส่งคืนแถวที่ไม่มีค่า null เท่านั้น สำหรับฉันแล้วดูเหมือนว่าการทำงานที่ต้องการสำหรับกรณีนี้คือการรักษาสภาพที่แท้จริงเป็นจริงเงื่อนไขเท็จเป็นเท็จและมีเงื่อนไขที่ไม่รู้จักประเมินเป็นจริง ฉันได้สร้างกรณีใช้งานน้อยจริง ๆ ที่นี่หรือไม่? มันมีแนวโน้มที่จะต้องการที่จะไม่ทราบว่าเป็นจริงจริงเป็นเท็จและเป็นเท็จจริงหรือไม่
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);