PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
7089 | 99/07/12 17:19:12 | RE(1):ストアドプログラムから配列データを受け取る方法です By Taka |
7088 | 99/07/12 15:36:02 | ストアドプログラムから配列データを受け取る方法です By Taka |
カテゴリ:データベース
日付:1999年07月12日 15:36 発信者:Taka
題名:ストアドプログラムから配列データを受け取る方法です
皆さんこんにちは。
少し前に、RPCFUNCを使って配列パラメータを渡す方法の話題がありましたが、
ちょっと工夫することで、ストアドから配列パラメータを「受け取る」ことができたので報告します。
ポイントは、
・パッケージレベルで配列変数を宣言しておく
(この変数は、セッションに対して有効なインスタンス変数みたいなものです)
・パッケージファンクションは、実行用/取り出し用の2つをつくる
ということです。
【パッケージ】
CREATE OR REPLACE PACKAGE TEST_PKG IS
TYPE TypeStringArray IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
MAIN_BUF TypeStringArray;
DUMMY_BUF TypeStringArray;
FUNCTION GET_ARRAY_EXEC RETURN NUMBER;
FUNCTION GET_ARRAY( PARM_1 OUT TypeStringArray ) RETURN NUMBER;
END;
/
【パッケージ本体】
CREATE OR REPLACE PACKAGE BODY TEST_PKG IS
FUNCTION GET_ARRAY_EXEC RETURN NUMBER IS
cnt NUMBER := 0;
BEGIN
MAIN_BUF := DUMMY_BUF;
FOR c IN (SELECT ColumnName FROM TableName) LOOP
cnt := cnt + 1;
MAIN_BUF(cnt) := c.ColumnName;
END LOOP;
RETURN cnt;
END;
FUNCTION GET_ARRAY( PARM_1 OUT TypeStringArray ) RETURN NUMBER IS
BEGIN
PARM_1 := MAIN_BUF;
RETURN MAIN_BUF.COUNT;
END;
END;
/
【Transaction型ユーザーオブジェクトでの外部関数宣言】
function long GetArrayExec() rpcfunc alias for \"TEST_PKG.GET_ARRAY_EXEC\"
function long GetArray( ref string parm[] ) rpcfunc alias for \"TEST_PKG.GET_ARRAY\"
【スクリプト記述例】
long cnt, max
string ary[], buf
buf = Space(10)
// 実行
max = SQLCA.GetArrayExec()
// 必要な配列を初期化
FOR cnt = 1 TO max
ary[cnt] = buf
NEXT
// 取り出し
SQLCA.GetArray( ary )
// 処理
FOR cnt = 1 TO max
lb_1.AddItem( ary[cnt] )
NEXT
※ 環境について:ORACLE 7.3 (PL/SQL 2.3)以上 & PB5.0.04以上
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS (記載なし)
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.