|
|
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
日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。
発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
|
|
|
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
|
|