以下のSQL文で、どのような結果が返されますか。
SELECT COALESCE(NULL,NULL,3,TO_NUMBER('4'),5,6,7) FROM dual;Aエラーになる
BNULL
C3✓
D4
E5
正解:C解説
COALESCE(val1, val2, ..., valN)は、引数を左から評価して最初の非NULL値を返すファンクションです。
今回の式を左から評価すると:
| 引数 | 値 | NULLか? |
|---|---|---|
| 1 | NULL | はい |
| 2 | NULL | はい |
| 3 | 3 | いいえ → これが返る |
| 4 | TO_NUMBER('4') = 4 | (評価されない) |
| 5以降 | 5, 6, 7 | (評価されない) |
最初の非NULL値である3が返ります。
重要な制約:COALESCEの引数はすべて同じデータ型である必要があります。今回はTO_NUMBER('4')で明示的に文字列を数値に変換しているため、すべて数値型となり型エラーにはなりません。
SELECT COALESCE(NULL, NULL, 3, TO_NUMBER('4'), 5, 6, 7) FROM dual;
COALESCE(NULL,NULL,3,TO_NUMBER('4'),5,6,7)
-------------------------------------------
3NULL関連関数の比較
| 関数 | 用途 |
|---|---|
| NVL | NVL(expr1, expr2) - expr1がNULLならexpr2を返す(2引数) |
| NVL2 | NVL2(expr1, expr2, expr3) - NULLか否かで分岐 |
| COALESCE | 複数の引数から最初の非NULL値を返す |
| NULLIF | 2つの値が等しい場合にNULLを返す |