TOP書籍連動> IN OUTパラメータ
まるごと 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パラメータ