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

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

第11回:ストアドプロシージャの移行(3)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/12/16
1   2  次のページ
OUTパラメーター

   プロシージャー移行3回目の今回は、OUT/IN OUTパラメータについて紹介します。

   PL/SQLにおけるOUTモードのパラメータには、値を書き込むことができ、ストアドプロシージャから呼び出し側に、その値を返すことができます(リスト18)。
CREATE PROCEDURE MUL_DIV( A IN NUMBER,
                          B IN NUMBER,
                          MUL OUT NUMBER,
                          DIV OUT NUMBER ) IS
BEGIN
  MUL := A * B;
  DIV := A / B;
END;

DECLARE
  M NUMBER;
  D NUMBER;
BEGIN
  MUL_DIV( 8, 2, M, D );
  DBMS_OUTPUT.PUT_LINE( '8 * 2 = ' || M );
  DBMS_OUTPUT.PUT_LINE( '8 / 2 = ' || D );
END;

リスト18:OracleのOUTモードパラメータへの書き込み

   PostgreSQLにはOUTパラメータがありませんが、複合型を返すことができるので、一度に複数の値を返すことは可能です。ただしその場合は、値の受け取り方がまったく違いますので、呼び出し側での変更も必要です。

   まず、複数の値を返すための複合型を定義します。ストアドプロシージャの内部では、複合型に各OUTパラメータの値を入れて返すようにします(リスト19)。

CREATE TYPE MUL_DIV_OUTS AS
  ( MUL INTEGER, DIV INTEGER );

CREATE OR REPLACE FUNCTION
  MUL_DIV( INTEGER, INTEGER )
RETURNS MUL_DIV_OUTS AS '
  DECLARE
    A ALIAS FOR $1;
    B ALIAS FOR $2;
    MUL INTEGER;
    DIV INTEGER;
    OUTS MUL_DIV_OUTS;
  BEGIN
    MUL := A * B;
    DIV := A / B;
    SELECT INTO OUTS MUL, DIV;
    RETURN OUTS;
  END;
' LANGUAGE 'plpgsql';

リスト19:PostgreSQLの複合型の定義

   次に、呼び出し側では複合型から各OUTパラメータを取り出し、該当する変数に代入するようにします(リスト20)。

CREATE OR REPLACE FUNCTION TEST_MUL_DIV()
  RETURNS VOID AS '
DECLARE
  M INTEGER;
  D INTEGER;
  OUTS MUL_DIV_OUTS%ROWTYPE;
BEGIN
  SELECT INTO OUTS * FROM MUL_DIV( 8, 2 );
  M := OUTS.MUL;
  D := OUTS.DIV;
  RAISE NOTICE ''8 * 2 = %'', M;
  RAISE NOTICE ''8 / 2 = %'', D;
  RETURN;
END;
' LANGUAGE 'plpgsql';

リスト20:呼び出し側でのパラメータの代入

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

% SELECT TEST_MUL_DIV();

 NOTICE: 8 * 2 = 16
 NOTICE: 8 / 2 = 4
PL/SQLのパラメータの3つのモード

   PL/SQLのパラメータには、IN、OUT、INOUTの3つのモードがあります。このうち、INモードはデフォルトのモードで省略することができます。リスト16は、次のように書いても同じです。

 CREATE FUNCTION
   SAY_A_IS_B( A IN VARCHAR2, B IN VARCHAR2 )
 RETURN VARCHAR2 IS
 BEGIN
   RETURN A || ' is ' || B;
 END;
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
第11回:ストアドプロシージャの移行(3)
OUTパラメーター
  IN OUTパラメータ
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

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