- PR -

Oracleのパッケージで引数が配列の場合どうしたら???

1
投稿者投稿内容
zensok
会議室デビュー日: 2004/05/28
投稿数: 1
投稿日時: 2004-05-28 19:43
こんばんは。いつも拝見させてもらっています。

OLEDB.NET データプロバイダとVB.NETを使って開発しています。
今悩んでいることは、Oracleのパッケージへの引数が
配列であるときの書き方です。
パッケージからの結果をVB側に読み込むことは、ヘルプなどを見て
なんとか解決できたのですが、VB側から配列の中身を渡すところが
どうしてもわかりません。
いろいろなスレッドを拝見すると、同様に悩んでらっしゃる方が
いらっしゃるようです。
どのように解決なさったのか、是非お教え頂ければ幸いです。

●現在していること
 売上伝票のようにヘッダと明細で構成されたエントリー画面で
 複数ある明細データを、パッケージのテーブル型の引数に入れて
 DBに更新させたい

●環境
 OS    :Windows2000
 言語    :VB.NET
 プロバイダ :OLEDB.NET データプロバイダ

●パッケージ内容
 「TBL_URIAGE」というテーブルにInsertするパッケージです。
 (列は、「URI_NO」だけあるとします)

 CREATE OR REPLACE PACKAGE PAKAGE_TEST
 IS
TYPE TABLE_URIAGE IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;

PROCEDURE READ_URIAGE(
p_cnt IN Number, -- 明細の行数
p_head_table OUT TABLE_URIAGE -- 売上明細用テーブル
);
END;
/

CREATE OR REPLACE PACKAGE BODY PAKAGE_TEST
IS
PROCEDURE WRITE_URIAGE(
p_cnt IN Number,
p_head_table OUT TABLE_URIAGE
)
IS
counter NUMBER = 1;
BEGIN

FOR counter IN 1..p_cnt LOOP
insert into TBL_URIAGE (URI_NO) values (p_head_table(counter));
END LOOP;

COMMIT;

END WRITE_URIAGE;
END;
/


ちなみに読み込むときは

Dim DbCommand As New OleDbCommand
DbCommand.Parameters.Add _
(New OleDbParameter("p_urino", OleDbType.Char)).Direction = _
ParameterDirection.Input
DbCommand.Parameters("p_urino").Value = "U04050001"

DbCommand.Connection = conn
DbCommand.CommandText = _
"{call PAKAGE_TEST.READ_URIAGE(?, {resultset 2, p_head_table})}"
DbCommand.CommandType = CommandType.Text

Dim Da As New OleDbDataAdapter(DbCommand)
Dim Ds As New DataSet

Da.Fill(Ds, "Uriage")
Grid.DataSource = ds.Tables("Uriage")

としたのですが。。どう書き換えたらVBから渡すことが出来るのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)