NVL2
構文
目的
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は数値の優先順位が最も高い引数を判断し、その引数のデータ型に他方の引数を暗黙的に変換して、そのデータ型を戻します。
関連項目:
-
暗黙的な変換の詳細は、表2-8を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください。
-
NVL2の戻り値が文字値である場合に、それに割り当てる照合を定義する照合導出ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。
例
次の例では、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