一回も披露したことのない豆知識

オラクルSQLの問題でDECODE関数について教えて下さい。


SELECT employee_id,
DECODE(department_id,80,
DECODE(commission_pct,NULL,'NO COMMISSION',
salary * commission_pct),
'NOT SALES'} "COMMISSION"
FROM employees;


上記のは
『DEPATMENT_ID列が80の場合でかつCOMMISSION_PCT列がNULL値の場合は「NO COMMISSION」、NULL値でない場合は「SALARY*COMMISSION_PCT」が文字列に変換されて戻されます。また、DEPARTMENT_ID列が80以外の場合は「NOT SALES」が戻されます。』と解説があり、

次に
SELECT employee_id,
DECODE( NULL IF(commission_pct,NULL),
0,salary * commission_pct,
'NO COMMISSION') "COMMISSION"
FROM employees;

このコードについては
『DECODE関数が最初に戻す「SALARY*COMMISSION_PCT」が数値型なので、「NO COMMISSION」が数値に変換できないためエラーになります。』
と解説がありました。


正常に実行できるのは前段のもので後段はできないとのことなのですがどうしてかわかりません。
なぜ後段では数値型に変換する必要があるのか、前段では同じsalary*commission_pctが文字列として扱っているのかわかりません。

DECODE関数の
DECODE(α、
        β、γ
         δ)
αがβのときはγを戻し、それ以外のときはδを戻すという公式があると思いますが、
もしかしてγとδは同じ型でなければいけないというルールがあるのでしょうか。でもたとえそうだとしてもまだ解せない部分があるのですが・・・。ご教授どうかよろしくお願いいたします。これはオラクルブロンズSQLの参考書の模擬試験にあった問題になります。

A 回答 (1件)

そういうのって、まずマニュアル読めばすぐ解りそうなものですけど?


http://www.shift-the-oracle.com/sql/functions/de …
「第3パラメータのデータ型を戻り値の型とするので、それ以降に記述する戻り値用のデータもその型に合わせなければならない。」(少々表現変更)
    • good
    • 0
この回答へのお礼

回答頂く事で冷静に理解することができました。
ありがとうございました。

お礼日時:2014/10/29 21:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す