LNNVL - вбудована функція oracle, яка повертає TRUE для оцінювання умов FALSE або UNKNOWN та повертає FALSE для умов, що оцінюються на TRUE. Моє запитання: яка користь буде повернути протилежне умові істини, а не просто обробляти значення NULL?
Наприклад, припустимо, що у вас є таблиця Emp зі стовпцями StartCommission та CurrentCommission, яка може містити нулі. Наступні повертає лише рядки, які не мають значення null:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
Якщо ви хочете включити рядки, де будь-яка комісія є нульовою, ви можете зробити щось подібне:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
Здавалося б, існує функція для скорочення цього синтаксису, але за допомогою LNNVL повертає всі нерівні записи та всі записи з нулями.
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
Додавання НЕ до цього повертає лише рядки без нулів. Мені здається, що бажаною функціональністю для цього випадку було б зберігати справжні умови істинні, помилкові умови неправдиві та невідомі умови оцінювати як істинні. Чи справді я створив справу з низьким рівнем використання? Чи справді більше шансів хотіти перетворити невідоме на справжнє, справжнє на помилкове, а хибне на справжнє?
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);