LNNVL - встроенная функция оракула, которая возвращает TRUE для условий, оценивающих в FALSE или UNKNOWN, и возвращает FALSE для условий, оценивающих в TRUE. Мой вопрос заключается в том, что было бы выгодно возвращать противоположность условию истины, а не просто обрабатывать значения NULL?
Например, предположим, что у вас есть таблица Emp со столбцами StartCommission и CurrentCommission, которые могут содержать нули. Следующее возвращает только строки с нулевым значением:
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);
Добавление NOT к этому возвращает только строки без нулей. Мне кажется, что желаемая функциональность для этого случая состояла бы в том, чтобы истинные условия были истинными, ложные условия ложными, и чтобы неизвестные условия оценивались как истинные. Я действительно создал случай низкого использования здесь? Действительно ли более вероятно захотеть превратить неизвестное в истинное, истинное в ложное и ложное в истинное?
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);