第9回:ストアドプロシージャの移行(1) (1/2)

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

第9回:ストアドプロシージャの移行(1)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/12/2
1   2  次のページ
GREATESTとLEAST関数

   ファンクションの移行についての説明は今回で最後となります。列の値を返すファンクションとビット列に関する関数を説明し、ストアドプロシージャの移行について紹介します。

   Oracleには、複数の値の中から最も大きいものを返すGREATEST関数と、最も小さいものを返すLEAST関数があります。
SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD')
  "Greatest" FROM DUAL;
   PostgreSQLには同じような関数はありませんが、配列を引数に取るストアドプロシージャ(リスト10)を作成することで同様の結果を得ることができます(リスト10のIF文の比較演算子を「
CREATE OR REPLACE FUNCTION
  GREATEST(TEXT[]) RETURNS TEXT AS '
DECLARE
  ARRY ALIAS FOR $1;
  GREATEST TEXT;
BEGIN
  GREATEST := ARRY[1];
  FOR I IN 1 .. ARRAY_UPPER(ARRY,1) LOOP
    IF ARRY[I] > GREATEST THEN
      GREATEST := ARRY[I];
    END IF;
  END LOOP;
  RETURN GREATEST;
END;
' LANGUAGE 'PLPGSQL';

SELECT GREATEST( ARRAY['HARRY', 'HARRIOT', 'HAROLD'] )
  AS "Greatest";

リスト10:ストアドプロシージャGREATESTの作成

   実行結果は次のようになります。

 Greatest
----------
 HARRY
(1 row)
   OR REPLACE句を使うと、上述したDROP FUNCTION文を実行せずに、ストアドプロシージャを再定義することができます。


BITAND関数

   Oracleでは、ビットごとにAND演算をするためにはBITAND関数を使用します。

SELECT BITAND( 2, 6 ) FROM DUAL;
   PostgreSQLにはビット演算子がありますので、それを使用します。

SELECT 2 & 6;
   実行結果は次のようになります。

 ?column?
----------
       2
(1 row)
BIN_TO_NUM関数

   Oracleには、1と0の繰り返しを数値に変換する、BIN_TO_NUM関数があります。

SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;
   PostgreSQLにはビット列型があり、ビット列の定数はB'1010'のように、文字列に近い表記で表すことができます。これを整数型にキャストすることで同じ効果を得られます。

SELECT CAST( B'1010' AS INTEGER )
  AS "BIN_TO_NUM(1,0,1,0)";
   実行結果を見てみましょう。

 BIN_TO_NUM(1,0,1,0)
---------------------
                 10
(1 row)
1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

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


INDEX
第9回:ストアドプロシージャの移行(1)
GREATESTとLEAST関数
  ストアドプロシージャの移行
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

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