- PR -

OracleClientを使用したストアドのoutからの値取得について

投稿者投稿内容
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-23 18:05
"189923351682"

この値は変数に入っていると思いますが、
それが数値型の変数である場合は、
パラメーターの「値」ではなく「値の型」と判断されている可能性があります。

MSDN OracleParameterCollection.Add メソッドより引用
-------------------------------------------------------------------
Add メソッドのこのオーバーロードを使用して整数のパラメータ値を指定する場合は、注意する必要があります。このオーバーロードは Object 型の value を受け取るため、次の C# の例のように、値が 0 の場合に整数値を Object 型に変換する必要があります。

parameters.Add("pname", Convert.ToInt32(0));

この変換を行わないと、コンパイラは、 OracleParameterCollection.Add (string 、 OracleType) オーバーロードを呼び出そうとしていると見なします。
-------------------------------------------------------------------

コマンドを実行する前に、
パラメーターの型や値が期待通りに入っているかをデバッグ出力してみてはどうでしょうか。


<追記>

OracleParameterCollection.Add メソッドの引数のパターンを確認してみてください。
Direction をとるものはないようですよ。



[ メッセージ編集済み 編集者: masa 編集日時 2006-10-23 18:13 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 18:36
masaさんお返事ありがとうございます。

とりあえずもう少し検証してみます。
そこでもう少し質問なのですがPL/SQLの
デバッグというのはどのようにするのが
一般的でよいのでしょうか。

わかれば助言下さい。
宜しくお願いします。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-23 18:53
> cmd.Parameters.Add("tesout", OracleClient.OracleType.VarChar, OarameterDirection.Output)

これ、

 Direction = Output

でなく、

 Size = Outputに対応する整数値

として渡されていませんか?


> そこでもう少し質問なのですがPL/SQLの
> デバッグというのはどのようにするのが
> 一般的でよいのでしょうか。

大きなストアドだとかなり大変なんですよね。

私は SQLPlus + ObjectBrowser です。
Oracle から VisualStudio に統合できる開発用ツールが出ていますが、
ダウンロードしただけでインストールしていないです。

SQLPlus を使うならこのあたりを参考にしてみてはどうでしょう。

Oracle PL/SQL 編16 - デバッグメッセージ表示、dbms_output.put_line
 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl16.htm


<追記>

ひょっとして私が書き込んだ「デバック出力してみては」という部分でしょうか。
PLSQLでなく、VB上でブレークポイントを設定して cmd の中身を見てみてくださいという意味です。
おそらく、Direction が Input になっているかと。



[ メッセージ編集済み 編集者: masa 編集日時 2006-10-23 18:55 ]

[ メッセージ編集済み 編集者: masa 編集日時 2006-10-23 19:00 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 19:46
masaさん何度もお返事頂いてありがとうございます。

いわれたとおりdirectionのプロパティを確認したところ
cmd.Parameters(1).Direction
上記がINPUTになっていました。
よって
Dim tesout As OracleClient.OracleParameter = _
cmd.Parameters.Add("tesout", OracleClient.OracleType.VarChar, 20)
cmd.Parameters(1).Direction = ParameterDirection.Output
としたところエラーもなくかつ
tesout.Value.ToString で値を取得できました。
ありがとうございます。

本日より初のPLSQLの業務を行っているのですが
周りに知ってる人がいなく悪戦苦闘中です。

SQLPLUSを使用してのdebug方法をがんばって
みてみます。

ありがとうございました。

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