PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
6272 99/05/11 17:45:49 RE(3):RPCFUNCで配列を渡せました! By てとらぽっと
6256 99/05/10 18:11:24 RPCFUNCで配列を渡せました! By Taka
6254 99/05/10 16:15:24 RE(1):PB6.5: ストアドプロシージャに配列を渡して更新できますか? By てとらぽっと
6241 99/05/07 15:34:13 PB6.5: ストアドプロシージャに配列を渡して更新できますか? By A.T

カテゴリ:PowerBuilderの開発環境
日付:1999年05月10日 18:11 発信者:Taka
題名:RPCFUNCで配列を渡せました!

A.Tさん、てとらぽっとさん、こんにちは。

>基本的なことかもしれませんが、PBからストアドに配列を渡して一括更新する方法を
>教えて下さい。

この話題、今まで何度か出ていますね。そのたびに「配列は渡せない」というコメントがありました。
(私も過去3回くらい言ってました...(^^; )

ところが、実は RPCFUNC を使って出来るんです!
以下サンプルで?す。

まず、パッケージで「PL/SQL表の型」を作成します。
CREATE OR REPLACE PACKAGE  TEST_PKG  IS
 TYPE TYPE_ARRAY IS TABLE OF NUMBER  INDEX BY BINARY_INTEGER;
END;

次に、上記「型」を引数にしたプロシジャ(またはファンクション)を作ります。
(この例では、配列で渡された数値を登録する)
CREATE OR REPLACE PROCEDURE  TEST_PROC
( PARM_1 IN TEST_PK.TYPE_ARRAY ) IS
 cnt INTEGER;
BEGIN
 FOR cnt IN 1 .. PARM_1.COUNT  LOOP
  INSERT INTO TableName VALUES( PARM_1(cnt) );
 END LOOP;
END;

PBでは、トランザクション・クラスを継承して作成したユーザーオブジェクトのローカル外部関数で、
subroutine TEST_PROC( integer parm_1[] ) RPCFUNC
と宣言しておきます。

これで、例えばスクリプトから
integer ary[]
ary[1] = 10
ary[2] = 20
ary[3] = 30
SQLCA.TEST_PROC( ary )
COMMIT;
とすれば、3行分一度に登録することができます。(^^)/

※ RPCFUNCの使い方については、オンラインブック等をご覧ください。


てとらぽっとさん:
>要件にあえば、
>REF CURSOR型を引数にしたストアドプロシージャをデータソースに持つDWを作る…
>ことができるらしいです(うちの古いRDBMSではREF CURSOR型がないので、歯切れが悪いです。(-_-;)

これは...受け取る時の話ですね。データを渡したい場合には使えません。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows95
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)

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