問題ID: 19976
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID: 19976
msg# 1
bucchakete
投稿数: 2
解説に、以下の記述があります。
「NVL2(salary, salary + 10000, '')は、SALARY列の値がNULL値以外の場合は「salary + 10000」を返し、NULL値の場合は''を返します。」
NVL2の場合、引数2と引数3のデータ型が同じである必要があると思うのですが、なぜ解説の通りになるのでしょうか?
「NVL2(salary, salary + 10000, '')は、SALARY列の値がNULL値以外の場合は「salary + 10000」を返し、NULL値の場合は''を返します。」
NVL2の場合、引数2と引数3のデータ型が同じである必要があると思うのですが、なぜ解説の通りになるのでしょうか?
Re: 問題ID: 19976
msg# 1.1
quensan
投稿数: 119
Oracleでは空文字('')はNULLとして扱われるみたいです。
問題のNVL2をさらにNVL2で囲むと、''を返す行はNULL値のようで、'NULLだよ'と出てきました。
SELECT employee_name, NVL2((NVL2(salary, salary + 10000, '')), 'NULLじゃない', 'NULLだよ') FROM employees;
ちなみに、引数2と引数3は暗黙の型変換が可能な場合はエラーになりません。('AAA'はだめだけど、'123'はOK)
問題のNVL2をさらにNVL2で囲むと、''を返す行はNULL値のようで、'NULLだよ'と出てきました。
SELECT employee_name, NVL2((NVL2(salary, salary + 10000, '')), 'NULLじゃない', 'NULLだよ') FROM employees;
ちなみに、引数2と引数3は暗黙の型変換が可能な場合はエラーになりません。('AAA'はだめだけど、'123'はOK)
ただし、第2引数と第3引数は同じデータ型でなければなりません(暗黙的なデータ変換が行われる場合はエラーとなりません)。異なるデータ型を返す式を指定するとエラーとなります。
Re: 問題ID: 19976
msg# 1.1.1
bucchakete
投稿数: 2
とても丁寧なご回答、ありがとうございます!
助かりました(o_ _)o))
助かりました(o_ _)o))