- PR -

odp.net、c#、PLSQL

1
投稿者投稿内容
まさ
会議室デビュー日: 2005/04/18
投稿数: 3
投稿日時: 2005-04-18 00:08
以下の件についてお尋ね致します。
現在、C#、ORACLE10gにてPLSQLを呼び、そのPLSQLより配列のパラメータを受け取る
プログラムを作成しています。

OracleParameter prmHikiateBusoku
  = cmd.Parameters.Add("o_HikiateBusoku", OracleDbType.Char,2);
prmHikiateBusoku.Direction
  = ParameterDirection.Output;
prmHikiateBusoku.Size = paramSize;
prmHikiateBusoku.ArrayBindSize = new int[paramSize];
prmHikiateBusoku.CollectionType
  = OracleCollectionType.PLSQLAssociativeArray;
prmHikiateBusoku.Value = DBNull.Value ;

cmd.ExecuteNonQuery();

上記のようにOUTの配列パラメーターを設定し実行まではうまくいきましたが
OUTの配列パラメーターを受け取り、1行ごとにデータを受け取るところが
わかりません。
どなたかわかる方教えて頂きたいのですが?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-18 23:47
 ここに示してあるのは、C#ですよね。PL/SQLでの定義は、どうなっているのでしょう?両方が一致しないと、とれるものもとれないと思いますが、いかがでしょう?


 それで、ODP.NETに付属…だったかな?サイトに置いてあったかな?サンプルは一通り目を通しましたか?また、この会議室の上に、「スレッドディレクトリ」というリンクがありますが、そこは目を通しましたか?


 何度か出ている問題のような気がします。
_________________
まさ
会議室デビュー日: 2005/04/18
投稿数: 3
投稿日時: 2005-04-19 00:50
Jittaさん、ありがとうございます。

定義は以下のようにC#とPLSQLであわせてあります。

CREATE OR REPLACE PACKAGE AAA
TYPE HikiateBusoku is table of CHAR(2) index by BINARY_INTEGER;
FUNCTION FncBBB (
o_HikiateBusoku OUT HikiateBusoku
)

実際に実行して正常に返ってくるのでロジックは合っていると思います。

サンプルは見ましたが、該当するサンプルはありませんでした。

Jittaさんのおしゃっている「スレッドディレクトリ」を
みてみたいのですが、どこにあるのかわかりません。
すいませんが、教えて頂けないでしょうか?
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2005-04-19 10:06
こんにちわ。
o_HikiateBusokuの値が取りたいということでしょうか。
配列でない引数と同じで、OracleCommand.Parameters(Index).ValueにOUT引数で取得できますよ。
Valueの中に配列の情報?が格納されていると思います。
Valueを他の配列にキャストするとどうでしょうか?
_________________
まさ
会議室デビュー日: 2005/04/18
投稿数: 3
投稿日時: 2005-04-19 15:17
トージさんありがとうございます。

以下のように
string[] argHikiateBusoku = (string[])prmHikiateBusoku.Value;
変数に代入しようとしましたが「指定されたキャストは有効ではありません。」
のエラーになってしまいます。
また
 prmHikiateBusoku(i).Value.ToString()
のようにも行いましたがコンパイルがとおりません。
コーデングで何か問題があるのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-19 19:25
> みてみたいのですが、どこにあるのかわかりません。
 これは、どの情報が該当するかわからなかったという意味でしょうか?それとも、「スレッドディレクトリ」のリンクがどこにあるのか、わからなかったということでしょうか?
 後者なら、スレッド一覧に戻ると、「新しいスレッド」のリンクの下にあります。
 前者なら、
ディレクトリ > データベース > Oracle
こうたどると、Oracle関係のものが並んでいます。

 「pl sql 引数 配列」の「すべてを含む」をキーにして、Insider.NET会議室を検索してみてください。たぶん、これで解決できるのではないかと思います。検索のリンクは、右上の方に小さくあります。

_________________
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2005-04-20 11:51
引用:

まささんの書き込み (2005-04-19 15:17) より:

string[] argHikiateBusoku = (string[])prmHikiateBusoku.Value;
変数に代入しようとしましたが「指定されたキャストは有効ではありません。」
のエラーになってしまいます。


例外ですね。
私はOracleStringの配列には格納してから、Objectの配列に格納しています。


他にいい方法をご存知の方がいらっしゃったら、教示していただきたいです。
_________________
1

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