SQL文の中でIF-THEN-ELSEロジックを使用したい場合、
多くの人がCASE式を使用していると思います。
しかし、昔からORACLEデーターベースを使っている方は、
DECODE関数の方がメジャーかもしれません。
実際ORACLEの開発ではDECODE関数をよく使用しているのが
現状です。
好みの問題かもしれませんが・・・。
CASE式
・SQL1999準拠であるため、どのデータベースでも使用可能。
・ORACLEでは、ORACLE9iからのみサポートされている。
DECODE関数
・DECODE関数はORACLEでしか使用することのできない
ORACLE独自の関数。
どちらも同じ処理が可能ですが、
より複雑な条件式を組み込みたい場合は、
CASE式の方が断然に高機能で便利です。
しかし、既存のコード体系を新しい体系に変換する程度のことが
したい場合は、DECODE関数の方が簡単に記述できるので便利かなと・・・。
結局は、
・データベースがORACLE9i以降であればCASE式を利用する。
・データベースがORACLE8i以前及び、
以前のバージョンとの互換を考えるならDECODE関数を利用する。
といったところでしょうか。
コメント (2)
case式では、
サブクエリを引数としたinやexistsを使用できるという決定的な違いがありますよ(decode関数では使用できません)
oracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/2-2-1.html
投稿者: 重蔵 | 2005年9月12日 10:39
やはり、CASE式の方が色々と応用がきいて便利だから、使える環境ではCASE式を使う方がいいでしょうね。下記サイトを読むと、こんな使い方があったのか! と驚くぐらい幅広い応用がありますね。
http://www.geocities.jp/mickindex/database/db_case.html
投稿者: CASE式に一票 | 2005年11月11日 22:46