- PR -

ODP.NETを使用してIN引数に配列を持つストアドファンクションのパラメータセットについて

1
投稿者投稿内容
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2004-04-11 14:46
OracleDBにIN引数に配列を持つストアドを作成して
VB.NET + ODP.NETでコールしようとしているんですが、
配列引数のパラメータセット部分の記述方法がわかりません
oo4oだとParameters.AddTableを使用してセットしていたのですが・・・

使用しているバージョンについては
  Oracleは9.2.0.1.0
  .NET FrameWorkは1.0.3705
  ODP.NETは9.2.0.2.102です
ご教授宜しくお願いします。


下記にストアドソース(仕様部のみ)をつけます
---------------------これよりストアドソース-------------------------------
CREATE OR REPLACE PACKAGE MNT0030_PKG AS
TYPE InV7_MODEL IS TABLE OF VARCHAR2(7) INDEX BY BINARY_INTEGER;
FUNCTION MNT0030_MAIN (
IN_MaxRow IN NUMBER
,IN_DENNO IN VARCHAR2
,IN_CD IN InV7_MODEL
,OT_ERRNO OUT VARCHAR2
,OT_ERRMSG OUT VARCHAR2
) RETURN NUMBER;
END;
---------------------ここまでストアドソース-------------------------------
ももんが
会議室デビュー日: 2002/12/07
投稿数: 9
投稿日時: 2004-04-12 00:51
sf5さんこんばんは

OTNのサイトのマニュアルはご覧になられましたか?
http://otn.oracle.co.jp/tech/windows/odpnet/index.html

サンプルコードもありますよ。
それともそのコードも含めて動かないということでしょうか?
詳細をかかれた方がレスポンスしやすいと思いますよ
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2004-04-12 20:59
ももんがさんご返答ありがとうございます
OTNのサイトは見ました。
OTNのサイトにあったHow To資料: ODP.NETデータベース・コマンドへの配列のバインド
であったサンプルコードは配列パラメータを使用して複数回同じストアドをコールする
というものですが、
質問したかった内容は、一回のストアドコールで配列のパラメータを
渡し、ストアド内でループさせるファンクションがあった時、その配列となるパラメータ
(今回ではIN_CD)のパラメータ引渡しをどうすればいいのかということです。
oo4oではAddTableメソッドでパラメータのセットができていたのですが、
ODP.NETでそれにあたるメソッドが見当たらないのです。
ODP.NETではどうすればいいのかを宜しくお願いいたします。

ストアドのパッケージを下に記載します。
CREATE OR REPLACE PACKAGE TEST_PKG AS
TYPE InV7_MODEL IS TABLE OF VARCHAR2(7) INDEX BY BINARY_INTEGER;
FUNCTION TEST_MAIN (
IN_MaxRow IN NUMBER
,IN_DENNO IN VARCHAR2
,IN_CD IN InV7_MODEL
,OT_ERRNO OUT VARCHAR2
,OT_ERRMSG OUT VARCHAR2
) RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY TEST_PKG AS
FUNCTION TEST_MAIN (
IN_MaxRow IN NUMBER
,IN_DENNO IN VARCHAR2
,IN_CD IN InV7_MODEL
,OT_ERRNO OUT VARCHAR2
,OT_ERRMSG OUT VARCHAR2
) RETURN NUMBER
IS
BEGIN
BEGIN
FOR N_WK_IDX IN 1..IN_MaxRow LOOP
INSERT INTO TESTTBL (
DENNO
,EDANO
,CD
) VALUES (
IN_DENNO
,IN_EDANO
,IN_CD(N_WK_IDX)
);
END LOOP;
END;
RETURN 0;
EXCEPTION
WHEN OTHERS THEN
OT_ERRNO := SQLCODE;
OT_ERRMSG := SQLERRM;
ROLLBACK;
RETURN 3;
END TEST_MAIN;
END;
/

ももんが
会議室デビュー日: 2002/12/07
投稿数: 9
投稿日時: 2004-04-13 02:02
すいません、早とちりしてました(^^;;

英語サイトの情報ですが索引付き表のサポートは9.2.0.4からみたいです。
サンプルソースを見る限り型を設定するプロパティ値が変わるだけで配列のバインドと変わらないみたいです。リンクを張っておきます。
http://download-east.oracle.com/docs/html/B10961_01/whatsnew.htm#970222
※もしかすると英語版OTNに登録しないと見れないかもしれません。

手元にオラクル実行環境がないのでもし、うまく動いたら教えて頂けますか?

[ メッセージ編集済み 編集者: ももんが 編集日時 2004-04-13 02:03 ]
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2004-04-13 13:35
ももんがさんご返答ありがとうございます。
リンク先を見させてもらいました。
9.2.0.4からみたいですね。
いざ試してみようと思ったところ、ODP.NETを9.2.0.4.0にする時
Patch Set Release(PSR) 9.2.0.4以降を必ず先に適用した上で 適用する必要があります。
となっていたので、パッチを当ててみようとしたところ、
うまくパッチがあたらない状態です。
なので、今すぐ実際に動いたのかを見れない状態です。
申し訳ないですが、確認はもう少しかかりそうです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-13 13:48
引用:

sf5さんの書き込み (2004-04-13 13:35) より:

パッチを当ててみようとしたところ、
うまくパッチがあたらない状態です。


 OUIを、先にバージョンアップする必要があったような?あと、Perlかなにか、スクリプト処理のインストールと、バッチファイル中の、該当するディレクトリ名を書き換える必要も、あったような?うろ覚えですみません。

 まず、KROWNのインストールに関する記述を印刷して、その中で“関係ないもの”を塗りつぶし、しなければならないことを明確にしました。とっても面倒。。。
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2004-04-14 21:33
ご返答ありがとうございます。
そうですね、OUIをバージョンアップしてる途中でエラーが発生しているみたいです。

インストールログを見ると
C:\Program Files\Oracle\Inventory/Contents/LibsList.serを読み込めません。インベントリ情報の一部が失われています。
これはどういうことなのでしょうか?
確かにこのファイルは無かったのです。
一度oracleを再インストールしたほうがいいのでしょうか?
すみませんがご教授宜しくお願いいたします。
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2004-04-16 15:09
OUIのアップデートができない理由はわかりました。
setup.exeがあるパスに全角文字が入っていることが原因でした。
英語サイトのOTNにあったサンプルソースで
無事にパラメータが引き渡されることを確認しました。
色々と皆様に助けていただいてありがとうございます。
1

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