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