|
|
前のページ 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)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
|
|