 |
|
| 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
日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。
発売日:2004/12/08発売 定価:\1,890(本体 \1,800+税)
|
 |

| 著者プロフィール 奥畑 裕樹(OKUHATA, Hiroki) Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
 |
|
 |
|