Re: 問題ID: 13539

この質問の投稿一覧へ

なし Re: 問題ID: 13539

msg# 1.1
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-12-10 14:10
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
エラーが出ないはずの選択肢も異なる型を入れようとしているのでエラーになる気がします。

2. が正解となっていますが、4. も正解だと思います。
「気がします」、「と思います」と言われても、実際そうなるのですが…

# sqlplus pingt/oracle@XE

SQL*Plus: Release 11.2.0.2.0 Production on 木 12月 10 13:59:35 2020

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT NVL2(commission, 'setting', 'none') FROM employees;

NVL2(CO
-------
setting
setting
setting
setting
setting
setting
setting
setting
setting
setting
setting

NVL2(CO
-------
setting
setting
setting
setting
setting
none
none
none
none
none
none

22行が選択されました。

SQL> SELECT NVL2(commission, commission, 'none') FROM employees;
SELECT NVL2(commission, commission, 'none') FROM employees
                                    *
行1でエラーが発生しました。:
ORA-01722: 数値が無効です。

この問題では「NVL2(第1引数, 第2引数, 第3引数)」という関数の挙動についてのものですが、エラーになるものでは
・行の「第1引数:commission列の値」をチェックし、
・NULLではない→第2引数である、行の「commission列」の値を返す
・NULLである→第3引数(ここでは文字列none)を返す
を期待しているのですが、第2引数(commission列)はNUMBER型、であり'none'は文字列なので一致せずエラーになる(ORA-01722: 数値が無効です。)というものです。

で、slachetさんの想定される4は「NVL2(commission, 'setting', 'none')」となっており
・行の「第1引数:commission列の値」をチェックし、
・NULLではない→第2引数である'setting'という文字列を返す
・NULLである→第3引数である'none'という文字列を返す
なので、第2引数と第3引数は型が同じなので問題なく実行される、ということです。

実際に動作検証して確認するのがおすすめですよ。

投稿ツリー

  >フォーラム検索へ


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