개인적인 정리

Oracle LNNVL() 본문

DB/ORACLE

Oracle LNNVL()

yeon.Biju 2020. 4. 8. 21:34

오라클 LNNVL()

 

LNNVL()

   - 조건이 UNKNOWN 이나 FALSE 이면 TRUE 를 return ?? 

   -  NOT IN 또는 NOT EXISTS 와 유사하면서 조금 다른 느낌정도 ?

   - 예제를 봐야 이해가 된다.
   - 사실 처음봐서 횡설 수설...

 

LNNVL(condition)

의 형태

 

LNNVL provides a concise way to evaluate a condition when one or both operands of the condition may be null. The function can be used in the WHERE clause of a query, or as the WHEN condition in a searched CASE expression. It takes as an argument a condition and returns TRUE if the condition is FALSE or UNKNOWN and FALSE if the condition is TRUE. LNNVL can be used anywhere a scalar expression can appear, when contexts where the IS [NOT] NULL, AND, or OR conditions are not valid but would otherwise be required to account for potential nulls.

 

Oracle Database sometimes uses the LNNVL function internally in this way to rewrite NOT IN conditions as NOT EXISTS conditions. In such case, output from EXPLAIN PLAN showw this operation in the plan table output. The condition can evaluate any scalar values but cannot be a compound condition containing AND, OR, or BETWEEN.

 

The table that follows shows what LNNVL returns given that a -2 and b is null.

Condition Truth of Condition LNNVL Return Value
a=1 FALSE TRUE
a=2 TRUE FALSE
a Is NULL FALSE TRUE
b=1 UNKNOWN TRUE
b IS NULL TRUE FALSE
a=b UNKNOWN TRUE

 

오라클 OE 계정으로 테스트 가능하다.

 

1)

SQL> SELECT COUNT(*)  FROM employees;

   --> 107

 

2)

SQL> SELECT COUNT(*) 
FROM employees
WHERE commission_pct < .2 ;

   --> 11

 

3)

SQL > SELECT COUNT(*) 
FROM employees
WHERE commission_pct IS NULL ;

   --> 72

 

4)

SQL>SELECT COUNT(*)  
FROM employees
WHERE LNNVL(commission_pct >= .2) ;

   --> 83

 

* 전체 107건 가운데 commission_pct >= .2 이 아닌 것을 구해준다.

그럼 commission_pct >= .2 이 아닌 것은 commission_pct < .2 인 것과 commission_pct IS NULL 인 것이 있을 것이다.

그것을 구해주는 용도로 사용할 수 있을 것 같다.

 

'DB > ORACLE' 카테고리의 다른 글

[Oracle] LPAD()  (0) 2020.04.08
[Oracle] LOWER()  (0) 2020.04.08
[Oracle] LOG()  (0) 2020.04.08
Oracle LOCALTIMESTAMP()  (0) 2020.04.08
Oracle LN()  (0) 2020.04.08
Oracle LISTAGG()  (0) 2020.04.08
Oracle LENGTH()  (0) 2020.04.07
Oracle LEAD()  (0) 2020.04.07
Comments