• 締切済み

移植性のあるSQLの書き方(改)

先に質問内容を書き間違えてしまいましたので、 改めて・・・ 現在Oracleを使用していますが、 将来他のDBに切り替える可能性もある、ということで、 移植性のあるSQLを書こうとしているのですが・・・ ある文字列フィールドの値がNULLか空文字列の場合を除く、 という判定式で困っています。 普通のDBだと、   field IS NOT NULL AND field <> '' と書くところですが、 Oracleの場合、空文字列=NULLなので、 上記の書き方をすると、field <> NULL という式が成り立たず、 常に偽になってしまいます。 空文字列との比較が常に成り立たないなら、   NOT ( field IS NULL OR field = '' ) では・・・と思ったのですが、これでもダメです。 空文字列と比較する部分があると、 式全体が常に偽になってしまうようです。 移植性があり、且つ、パフォーマンス的にも問題のない、 なにかよい書き方ないでしょうか。。??

みんなの回答

回答No.1

RDBによって機能に違いがありますし、SQLも微妙に違います。 異なるRDB間で互換性を持たせるためには、各RDBで互換性のある機能しか使わないことです。 ご質問にあるNULLに関してですが・・ (少なくともこれまでの)オラクルでは、NULLと''(0バイトの文字列)は、同じ意味です。 他のRDBでは・・、例えば、SQLserverでは、NULLと''(0バイトの文字列)は別物です。 オラクルでは、表現できないNULLと''(0バイトの文字列)の区別を、移植先RDBで使おうとしなければ、 ご質問のような悩みはないと思います。(全てNULL表現で統一すれば良い) 但し、オラクルの関数を使う事になると、移植性が損なわれますので、 関数を使わない、もしくは、使う関数を極力抑えて、移植先RDBに存在しない関数は、 自作するなどの努力が必要になります。 蛇足ですが・・ 移植性を考えると、JET-SQLでODBC経由アクセスでしたら、ODBCが扱えるRDBに対して 互換性のあるSQLを書くことが出来ます。 処理効率的は良くないですが。

関連するQ&A