- - PR -
ODP.NETを使用してIN引数に配列を持つストアドファンクションのパラメータセットについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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; ---------------------ここまでストアドソース------------------------------- | ||||
|
投稿日時: 2004-04-12 00:51
sf5さんこんばんは
OTNのサイトのマニュアルはご覧になられましたか? http://otn.oracle.co.jp/tech/windows/odpnet/index.html サンプルコードもありますよ。 それともそのコードも含めて動かないということでしょうか? 詳細をかかれた方がレスポンスしやすいと思いますよ | ||||
|
投稿日時: 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; / | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2004-04-13 13:35
ももんがさんご返答ありがとうございます。
リンク先を見させてもらいました。 9.2.0.4からみたいですね。 いざ試してみようと思ったところ、ODP.NETを9.2.0.4.0にする時 Patch Set Release(PSR) 9.2.0.4以降を必ず先に適用した上で 適用する必要があります。 となっていたので、パッチを当ててみようとしたところ、 うまくパッチがあたらない状態です。 なので、今すぐ実際に動いたのかを見れない状態です。 申し訳ないですが、確認はもう少しかかりそうです。 | ||||
|
投稿日時: 2004-04-13 13:48
OUIを、先にバージョンアップする必要があったような?あと、Perlかなにか、スクリプト処理のインストールと、バッチファイル中の、該当するディレクトリ名を書き換える必要も、あったような?うろ覚えですみません。 まず、KROWNのインストールに関する記述を印刷して、その中で“関係ないもの”を塗りつぶし、しなければならないことを明確にしました。とっても面倒。。。 | ||||
|
投稿日時: 2004-04-14 21:33
ご返答ありがとうございます。
そうですね、OUIをバージョンアップしてる途中でエラーが発生しているみたいです。 インストールログを見ると C:\Program Files\Oracle\Inventory/Contents/LibsList.serを読み込めません。インベントリ情報の一部が失われています。 これはどういうことなのでしょうか? 確かにこのファイルは無かったのです。 一度oracleを再インストールしたほうがいいのでしょうか? すみませんがご教授宜しくお願いいたします。 | ||||
|
投稿日時: 2004-04-16 15:09
OUIのアップデートができない理由はわかりました。
setup.exeがあるパスに全角文字が入っていることが原因でした。 英語サイトのOTNにあったサンプルソースで 無事にパラメータが引き渡されることを確認しました。 色々と皆様に助けていただいてありがとうございます。 |
1