第8回:ファンクションの移行(2) (2/2)

まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第8回:ファンクションの移行(2)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/11/25
前のページ  1  2
DECODE関数

   OracleのDECODE関数(リスト8)は、列の値によって返す値を変えることができる便利な関数です。PostgreSQLには等価な働きをするCASE文(リスト9)があるので【注2】、それに変更します。
SELECT 担当者名,
       DECODE( 性別,
                  0, '女性',
                  1, '男性',
                  NULL ) "性別"
FROM 担当者マスタ
ORDER BY 担当者名;

リスト8:OracelのDECODE関数本文

SELECT 担当者名,
       CASE 性別
         WHEN 0 THEN '女性'
         WHEN 1 THEN '男性'
         ELSE NULL
       END AS "性別"
FROM 担当者マスタ
ORDER BY 担当者名;

リスト9:PostgreSQLのCASE文

※注2: なお、Oracleでは、9iからCASE文も使えます。
   図14は実行結果です。

 担当者名 |  性別
---------- + ------
 伊藤 |  女性
 宇賀神 |  男性
 岡田 |  男性
 佐瀬 |  男性
 斎藤 |  男性
 小野 |  男性
 小林 |  女性
 藤本 |  男性
 鈴木 |  男性
(9 rows)

図14:CASE文の実行結果


NVL、NVL2、COALESCE関数

   Oracleには、最初のNULLでない値を返す、便利なNVL関数があります。

SELECT 商品名, NVL( 卸単価, 0 ) "卸単価"
FROM 商品マスタ;
   PostgreSQLにも等価な機能を持つCOALESCE関数がありますので、それに変更します。COALESCE関数【注3】は可変個の引数を取りますので、OracleのNVL2関数も同様に変更できます。

※注3: Oracle 9iからはCOALESCE関数が使えます。
SELECT 商品名, COALESCE( 卸単価, 0 )
  AS "卸単価" FROM 商品マスタ;
   図15は実行結果です。

商品名 |   卸単価
------------------------ + --------
 デスクトップ型パソコン | 180000
 ノート型パソコン | 270000
 17型_ディスプレイ | 50000
 19型_ディスプレイ | 95000
 15型_液晶ディスプレイ | 120000
 デジタルカメラ | 0
 プリンタ | 25000
 スキャナ | 30000
 HUB | 7000
 ターミナルアダプタ | 20000
(10 rows)

図15:COALESCE関数の実行結果

前のページ  1  2


奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第8回:ファンクションの移行(2)
  MONTHS_BETWEEN(date1,date2)
DECODE関数
PostgreSQLとOracleによるデータベース相互移行マニュアル
第1回 データベース移行
第2回 データの移行(1)
第3回 データの移行(2)
第4回 SQL文の移行(1)
第5回 SQL文の移行(2)
第6回 SSQL文の移行(3)
第7回 ファンクションの移行(1)
第8回 ファンクションの移行(2)
第9回 ストアドプロシージャの移行(1)
第10回 ストアドプロシージャの移行(2)
第11回 ストアドプロシージャの移行(3)
第12回 ストアドプロシージャの移行(4)
第13回 まとめ

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored