2FFROM
OracleでSQLのトークンの間にスペースが入っていないのに正常に実行されてしまうケースがあった。要約するとこんな感じ。
> SELECT 2 FROM DUAL; 2 > SELECT '2' FROM DUAL; 2 > SELECT 2FROM DUAL; ORA-00923: FROMキーワードが指定の位置にありません。 > SELECT 2FFROM DUAL; 2.0
なんだこりゃ...と思ったんだけど、これはリテラルの解析とトークン区切りの問題だった。
数値リテラル
Oracle Database SQL言語リファレンス 数値リテラル
結局、数値リテラルで解析できるところまで進んで、そこでトークンの区切りとみなしてるみたい。
"2F"というのは浮動小数点のリテラルとして正しいので、2番目の例は"2F ROM"と解釈されて、3番目の例は"2F FROM"と解釈されている。
ちょっと奇妙な感じもするけど、確かにこれがダメだとすると
> SELECT 2+1 FROM DUAL; 3
も"+"の前後にスペースを入れないといけないことになってしまうね。
0 件のコメント:
コメントを投稿