2005.07.29

CASE式とDECODE関数

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

やはり、CASE式の方が色々と応用がきいて便利だから、使える環境ではCASE式を使う方がいいでしょうね。下記サイトを読むと、こんな使い方があったのか! と驚くぐらい幅広い応用がありますね。

http://www.geocities.jp/mickindex/database/db_case.html

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nitta