• ベストアンサー

算術演算子と連結演算子の優先順位について

select 'aa' ||nvl2(comm,1,0) + nvl2(comm,1,0) || 'aaaa' from emp →ORA-01722: 数値が無効です。 というエラーが発生します。 nvl2(comm,1,0) + nvl2(comm,1,0)部分に括弧でおおうと、 つまり(nvl2(comm,1,0) + nvl2(comm,1,0))にするときちんと実行結果が出ます。 算術演算子のほうが連結演算子より優先順位が高いと習ったのですが実は逆ということでしょうか。 回答のほどよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

Oracleでは算術演算子も連結演算子もSQL演算子となって優先順位が等しくなってしまう(参考URLの真ん中あたり)のではないでしょうか? そう考えれば左から実行されて文字列を連結してから+をしようとしてエラーがでているように思えます。

参考URL:
http://jibun.atmarkit.co.jp/lskill01/rensai/bronzesql02/bronzesql01.html
yukikundesuyo
質問者

お礼

回答ありがとうございます。 教師の間違いには困りますね。 とりあえず分かったのでよかったです。

その他の回答 (1)

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

単項演算子としての +,- と二項演算子 +,- の違いに関する思い違いではないでしょうか? ※ 単項演算子(+,-)は、最優先の演算子です。 二項演算子(+,-)と連結演算子の優先順位は同じですから、左優先になりますので質問されているSQLではエラーになります。 乗算、除算演算子は連結演算子より上位です。 例 SELECT 'AA' || -10 * -10 || 'BB' FROM DUAL = AA100BB

yukikundesuyo
質問者

お礼

回答ありがとうございます。 教師の間違いには困りますね。 とりあえず分かったのでよかったです。

関連するQ&A