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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.