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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.