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

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

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

   Oracleでは、IN OUTパラメータにあらかじめ値を入れておけるので、ストアドプロシージャ側に値を渡すことができます(リスト21)
CREATE PROCEDURE
  SWAP( A IN OUT VARCHAR2,
        B IN OUT VARCHAR2 ) IS
  C VARCHAR2(10);
BEGIN
  C := A;
  A := B;
  B := C;
END;

DECLARE
  A VARCHAR2(10) DEFAULT 'FIRST';
  B VARCHAR2(10) DEFAULT 'SECOND';
BEGIN
  SWAP( A, B );
  DBMS_OUTPUT.PUT_LINE( 'A = ' || A );
  DBMS_OUTPUT.PUT_LINE( 'B = ' || B );
END;

リスト21:OracleでのIN OUTパラメータ例

   その実行結果です。

A = SECOND
B = FIRST
   PostgreSQLでは、IN OUTパラメータに関しても、OUTパラメータと同様に複合型を使って移行します(リスト22)

CREATE TYPE SWAP_INOUTS AS
  ( A VARCHAR, B VARCHAR );

CREATE OR REPLACE FUNCTION
  SWAP( VARCHAR, VARCHAR )
RETURNS SWAP_INOUTS AS '
  DECLARE
    A ALIAS FOR $1;
    B ALIAS FOR $2;
    INOUTS SWAP_INOUTS;
  BEGIN
    INOUTS.A := B;
    INOUTS.B := A;
    RETURN INOUTS;
  END;
 ' LANGUAGE 'plpgsql';

 CREATE OR REPLACE FUNCTION TEST_SWAP()
   RETURNS VOID AS '
 DECLARE
   INOUTS SWAP_INOUTS%ROWTYPE;
 BEGIN
   INOUTS.A := ''FIRST'';
   INOUTS.B := ''SECOND'';
   SELECT * INTO INOUTS FROM SWAP(
INOUTS.A, INOUTS.B );
   RAISE NOTICE ''A = %'', INOUTS.A;
   RAISE NOTICE ''B = %'', INOUTS.B;
   RETURN;
 END;
 ' LANGUAGE 'plpgsql';

リスト22:IN OUTパラメータへの値の代入

   実行結果です。

% SELECT TEST_SWAP();

 NOTICE: A = SECOND
 NOTICE: B = FIRST
前のページ  1  2


奥畑 裕樹(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

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