構文
用途
NVL2
を使用すると、指定された式がNULLかどうかに基づく問合せによって戻される値を判断できます。expr1
がNULLでない場合、NVL2
はexpr2
を戻します。expr1
がNULLの場合、NVL2
はexpr3
を戻します。
引数expr1
は、任意のデータ型を持つことができます。引数expr2
およびexpr3
は、LONG
以外の任意のデータ型を持つことができます。
expr2
とexpr3
のデータ型が異なる場合、一方のデータ型が他方のデータ型に暗黙的に変換されます。暗黙的に変換できない場合、データベースはエラーを戻します。expr2
が文字または数値データの場合、暗黙的な変換は次のように実装されます。
expr2
が文字データの場合、Oracle Databaseは、expr3
がNULLの定数ではないかぎり、値を戻す前にexpr3
をexpr2
のデータ型に変換します。その場合、データ型の変換は行われず、expr2
のキャラクタ・セットでVARCHAR2
が戻されます。
expr2
が数値データである場合、Oracle Databaseは数値の優先順位が最も高い引数を判断し、その引数のデータ型に他方の引数を暗黙的に変換して、そのデータ型を戻します。
例
次の例では、employees
のcommission_pct
列がNULLかどうかによって、従業員の収入が給与と歩合か、または給与のみかを示します。
SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) income FROM employees WHERE last_name like 'B%' ORDER BY last_name; LAST_NAME SALARY INCOME ------------------------- ---------- ---------- Baer 10000 10000 Baida 2900 2900 Banda 6200 6820 Bates 7300 8395 Bell 4000 4000 Bernstein 9500 11875 Bissot 3300 3300 Bloom 10000 12000 Bull 4100 4100