LNNVL은 Oracle 내장 기능 으로 FALSE 또는 UNKNOWN으로 평가되는 조건에 대해 TRUE를 리턴하고 TRUE로 평가되는 조건에 대해 FALSE를 리턴합니다. 내 질문은 단순히 NULL 값을 처리하는 대신 진실 조건의 반대를 반환하면 어떤 이점이 있습니까?
예를 들어, 널을 포함 할 수있는 StartCommission 및 CurrentCommission 열이있는 Emp 테이블이 있다고 가정하십시오. 다음은 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);
여기에 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);