Oracle Database SQL(ORACLE MASTER Silver SQL 2019) 無料問題 2 / 10 ・ 分野2: SQL SELECT文を使用したデータの取得
次の SELECT 文を実行したときの結果として正しいものはどれか。 SELECT 'Oracle' || NULL || 'SQL' FROM dual;
- NULL(空の結果)
- Oracle だけが返る
- OracleSQL
- 実行時にエラーになる
正解と解説を見る
正解: C
正解の理由
SQL Language Reference の「Concatenation Operator」は、「長さ0の文字列は NULL として扱われるが、長さ0の文字列を別のオペランドと連結すると常に別のオペランドが結果になる。NULL になるのは2つの NULL 文字列を連結したときだけである」と述べる。'Oracle' || NULL は Oracle、それに 'SQL' を連結して OracleSQL になる。
違う選択肢
「NULL(空の結果)」… 連結の相手が NULL のとき、NULL の側は無視されて、もう一方の値がそのまま結果になる。結果が NULL になるのは、連結する2つとも NULL のときだけである
「Oracle だけが返る」… || は左から順に連結するので、最初の連結の結果 Oracle に 'SQL' も連結される。後ろの文字列が消えることはない
「実行時にエラーになる」… NULL を連結演算子のオペランドに書くこと自体は文法上の誤りではない。NULL との連結は、他方のオペランドが結果になる
押さえどころ
NULL になりうる式を連結するときは、NVL で長さ0の文字列に明示的に変換すると、将来の動作変更に左右されない。この文書も、NULL と長さ0の文字列の扱いが将来の版で変わりうると注記している。
Oracle Database SQL(ORACLE MASTER Silver SQL 2019)の演習アプリ(無料10問・全問は購入で)へ