問題ID: 19976

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-12-4 23:08
bucchakete  新米   投稿数: 2
解説に、以下の記述があります。
「NVL2(salary, salary + 10000, '')は、SALARY列の値がNULL値以外の場合は「salary + 10000」を返し、NULL値の場合は''を返します。」

NVL2の場合、引数2と引数3のデータ型が同じである必要があると思うのですが、なぜ解説の通りになるのでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-12-5 9:53
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)
ただし、第2引数と第3引数は同じデータ型でなければなりません(暗黙的なデータ変換が行われる場合はエラーとなりません)。異なるデータ型を返す式を指定するとエラーとなります。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-12-5 18:40
bucchakete  新米   投稿数: 2
とても丁寧なご回答、ありがとうございます!
助かりました(o_ _)o))

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.