最速怪談選手権

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))にするときちんと実行結果が出ます。

算術演算子のほうが連結演算子より優先順位が高いと習ったのですが実は逆ということでしょうか。

回答のほどよろしくお願い致します。

A 回答 (2件)

Oracleでは算術演算子も連結演算子もSQL演算子となって優先順位が等しくなってしまう(参考URLの真ん中あたり)のではないでしょうか?


そう考えれば左から実行されて文字列を連結してから+をしようとしてエラーがでているように思えます。

参考URL:http://jibun.atmarkit.co.jp/lskill01/rensai/bron …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/07 19:55

単項演算子としての +,- と二項演算子 +,- の違いに関する思い違いではないでしょうか?



※ 単項演算子(+,-)は、最優先の演算子です。
二項演算子(+,-)と連結演算子の優先順位は同じですから、左優先になりますので質問されているSQLではエラーになります。

乗算、除算演算子は連結演算子より上位です。
例 SELECT 'AA' || -10 * -10 || 'BB' FROM DUAL
= AA100BB
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/07 19:55

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