SqlFormatter
2点ダメなケースを見つけました。(T◇T)
関数名はDBによって異なるので、あらかじめ使っているDBの関数名を
登録していなければなりません。
これは、DatabaseMetaDataの以下のメソッドで取得できると思っていたのですが、オラクルの場合それらに含まれない関数があるのです。
getNumericFunctions = ABS,ACOS,ASIN,ATAN,ATAN2,CEILING,COS,EXP,FLOOR,LOG,LOG10,MOD,PI,POWER,ROUND,SIGN,SIN,SQRT,TAN,TRUNCATE getStringFunctions = ASCII,CHAR,CONCAT,LCASE,LENGTH,LTRIM,REPLACE,RTRIM,SOUNDEX,SUBSTRING,UCASE getSystemFunctions = USER getTimeDateFunctions = HOUR,MINUTE,SECOND,MONTH,YEAR
なぜかこの中にはNVLやTO_DATEやSUBSTRがありません。
これらのメソッドってそういう意味じゃないのかな???
もう一つダメなケース。
SELECT a.emp_id ,a.dept_id ,b.dept_id ,b.dept_name FROM emp a ,dept b WHERE a.dept_id = b.dept_id ( + )
http://oracle.se-free.com/dml/08_outer.html
なんだ?(+)って?外部結合???
これってオラクルだけなの? それとも標準SQLに含まれるの?
これは演算子的なモノ?文法的にはどういうモノになるんだろう?
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/queries.html#4982
外部結合演算子。オラクル固有みたい。
演算子ということは字句解析レベルに手を入れる必要がある。しかしオラクルのみに依存したくはない。あぁ、悩ましい・・・。