TOP書籍連動> GREATESTとLEAST関数
まるごと 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文の比較演算子を「<」に変えれば、LEAST関数になります)。

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関数
  ストアドプロシージャの移行