- - PR -
vb2008からRacleパッケージ呼び出しで戻り値取得時にエラーとなる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-07-15 22:44
いつもお世話になります。
VB2008からOracleパッケージを呼び出すと実行はうまくいっているようですが 戻り値取得でエラーとなってしまいます。 vbソース cmd.Connection = OraDatabase2 cmd.CommandText = "PKG_JUCHU_TORIKOMI.RDATA02" cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Clear() cmd.Parameters.Add(New OracleParameter("PARA_WSID", OracleDbType.Varchar2)). _ Direction = ParameterDirection.Input cmd.Parameters("PARA_WSID").Value = Trim(ComputerName) cmd.Parameters.Add(New OracleParameter("Ret", OracleDbType.Decimal, _ 1, DBNull.Value, ParameterDirection.Output)) Dim vERRM As Integer Try cmd.ExecuteNonQuery() 'ストアド実行 vERRM = cmd.Parameters("Ret").Value '<--戻り値取得 ここでエラーとなる Catch OraEx As OracleException 'Oracle例外発生時 MessageBox.Show(OraEx.Message, "ORACLE ERROR", _ MessageBoxButtons.OK, MessageBoxIcon.Stop) Catch ex As Exception '一般例外発生時 MessageBox.Show(ex.Message, "ERROR", _ MessageBoxButtons.OK, MessageBoxIcon.Stop) End Try パッケージ仕様部(仕様部・BODY部ともにコンパイルエラーはなし) procedure RDATA02(PARA_WSID in VARCHAR2, -- 端末ID Ret out NUMBER -- 戻り値 ); 上記の「'<--戻り値取得 ここでエラー」部分で型変換エラーとなるのですが、 ならば、と思いいろいろやってみましたが、上記ソースの型指定部分を以下のようにいろいろ変えてやってみても・・・ 「Dim vERRM As String」「OracleDbType.Decimal」で実行すると --> oracledecimalから型'string'への変換は無効です。 「Dim vERRM As Integer」「OracleDbType.Decimal」 --> oracledecimalから型'ingteger'への変換は無効です。 「Dim vERRM As Integer」「OracleDbType.int16」 --> oracledecimalから型'ingteger'への変換は無効です。 とエラーとなってしまいます。ちなみにリターンコードは数値0です。 なにか勘違いをしていますでしょうか? ちなみにsql/plusから実行すると正常終了します。 SQL> var Ret number; SQL> begin 2 PKG_JUCHU_TORIKOMI.RDATA02('PC01',:Ret); 3 end; 4 / PL/SQL procedure successfully completed. SQL> print :Ret RET ---------- 0 皆さんはどうしてらっしゃいます? ご添削の程よろしくお願いいたします。 [ メッセージ編集済み 編集者: コウジ 編集日時 2008-07-15 23:11 ] | ||||
|
投稿日時: 2008-07-16 09:46
エラーメッセージの通り、cmd.Parameters("Ret").Value の中に入っているのは OracleDecimal型の値ですので、vERRM の型も同じにしてあげましょう。 代入した後、vERRM.Value プロパティで Decimal型の値を取得できます。 あとはそのまま使うなり、Decimal.ToInt32() メソッドで Integer型にするなりご随意に。 参考URL(バージョンがわからないけどそう大きくは違わないはず) http://otndnld.oracle.co.jp/document/products/oracle10g/102/windows/B31247-01/OracleDecimalStructure.htm | ||||
|
投稿日時: 2008-07-16 18:59
rainさん、ご回答ありがとうございました。
VB側に「OracleDecimal」なんて型定義があったんですね・・・ 知りませんでした。 おかげで解決しました。 本当にありがとうございました。 |
1