LNNVL
構文
目的
LNNVLは、条件のオペランドの1つまたは両方がNULLの可能性がある場合にその条件を簡単に評価する方法を提供します。このファンクションは問合せのWHERE句で、またはWHEN条件として検索CASE式で使用できます。このファンクションは、引数として条件を取り、その条件がFALSEまたはUNKNOWNの場合はTRUEを戻し、TRUEの場合はFALSEを戻します。LNNVLは、スカラー式を指定できる場所であればどこでも指定でき、有効ではないが、発生する可能性があるNULLを評価するためにIS [NOT] NULL、ANDまたはOR条件が必要であるようなコンテキストでも指定できます。 
                  
Oracle Databaseは、LNNVLファンクションをこの方法で内部的に使用して、NOT IN条件をNOT EXISTS条件として書き換える場合があります。この場合、EXPLAIN PLANからの出力によって、この操作がPLAN TABLEに出力されます。conditionでは、どのようなスカラー値でも評価できますが、AND、ORまたはBETWEENを含む複合条件は指定できません。
                  
a = 2およびb=NULLの場合のLNNVLからの戻り値を次の表に示します。
                  
| 条件 | 条件の真偽 | LNNVLの戻り値 | 
|---|---|---|
| 
                               a = 1  | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               a = 2  | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               a   | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               b = 1  | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               b   | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               a = b  | 
                           
                               
  | 
                           
                               
  | 
                        
例
歩合を受け取らない従業員を含めて、歩合率が20%未満の従業員数を調べるとします。次の問合せは、20%未満の歩合を実際に受け取る従業員のみを戻します。
SELECT COUNT(*)
  FROM employees
  WHERE commission_pct < .2;
  COUNT(*)
----------
        11
歩合を受け取らない72人の従業員も含めるには、LNNVLファンクションを次のように使用して、この問合せを書き換えます。
                  
SELECT COUNT(*)
  FROM employees
  WHERE LNNVL(commission_pct >= .2);
  COUNT(*)
----------
        83