- PR -

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

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 17:27
いつもお世話になっています。

今回Oracle8.1.6上にあるストアドを実行し
戻り値を取得したいのですが
(vb.net2003 oracleclient使用 odpではなく)
サンプルなどをみながらPG作成してみたのですが
引数の型が正しくないとエラーとなってしまいます。

ストアド
PROCEDURE abc(test in varchar,tesout out varchar)
IS
w_tflg NUMBER(01);
BEGIN
select distinct denno INTO tesout
from PROG_TBL
where denno = test;
EXCEPTION
WHEN others THEN
w_tflg := 9;
END abc;

VB.net
''接続文字列などのセット

cmd.Parameters.Add("test", "189923351682")
Dim tesout As OracleClient.OracleParameter = _
cmd.Parameters.Add("tesout", OracleClient.OracleType.VarChar, ParameterDirection.Output)
cnn.Open()
cmd.ExecuteNonQuery()
上記Executeの部分でエラーとなってしまいます。

http://www.atmarkit.co.jp/fdb/rensai/odpdotnet03/odpdotnet03_2.html

アドレスを参考にしたのですが・・・

わかる方おられましたら宜しくお願いします。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-10-23 17:42
引用:

未記入さんの書き込み (2006-10-23 17:27) より:
いつもお世話になっています。

http://www.atmarkit.co.jp/fdb/rensai/odpdotnet03/odpdotnet03_2.html

アドレスを参考にしたのですが・・・



にも書いてあるけど。

そもそもストアドを呼ぶのに引数渡さないで
どうやってストアドはtestって値が189923351682

で有る事を判るんですかね? 

_________________
Inspired Ambitious
ISMS Assistant Auditor
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-23 17:47
引数の型が正しくなければエラーが発生するのは当然だと思いますが、
引数の型が正しくないと"いう"エラーが発生するのですか?

ところで、MSDN には、8.1.7 以降をサポートするとあります。

oracle8.0.5にsystem.data.oracleclientで接続時に文字化け
 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33545&forum=7&6

のようなスレッドもあがってますね。

未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 17:48
NAOさんお返事ありがとうございます。

VB側のコードを省略した部分があったので
のせます(すいません。)
Dim cnn As New OracleClient.OracleConnection(System.Configuration.ConfigurationSettings.AppSettings("ORA"))
Dim cmd As New OracleClient.OracleCommand("MsyoridMk2", cnn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("test", "189923351682")
Dim tesout As OracleClient.OracleParameter = _
cmd.Parameters.Add("tesout", OracleClient.OracleType.VarChar, ParameterDirection.Output)
cnn.Open()
cmd.ExecuteNonQuery()

としています。
申し訳ありませんでした。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-10-23 17:53
引用:

未記入さんの書き込み (2006-10-23 17:48) より:
NAOさんお返事ありがとうございます。

VB側のコードを省略した部分があったので
のせます(すいません。)
Dim cnn As New OracleClient.OracleConnection(System.Configuration.ConfigurationSettings.AppSettings("ORA"))
Dim cmd As New OracleClient.OracleCommand("MsyoridMk2", cnn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("test", "189923351682")
Dim tesout As OracleClient.OracleParameter = _
cmd.Parameters.Add("tesout", OracleClient.OracleType.VarChar, ParameterDirection.Output)
cnn.Open()
cmd.ExecuteNonQuery()

としています。
申し訳ありませんでした。


いや…だからさ…
ストアドに値を入れる指定は何処でしてるの?

自分が書いたコードと

引用:

http://www.atmarkit.co.jp/fdb/rensai/odpdotnet03/odpdotnet03_2.html



よく見比べてみたらどうですか? 
_________________
Inspired Ambitious
ISMS Assistant Auditor
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-10-23 17:55
> cmd.Parameters.Add("test", "189923351682")

型が違うのはこっちだったりして。
MSDNの「DataAdapter によるパラメータの使用」によると、
string は NVarcher に推論されるとあります。
NVarcher から Varchar への変換がうまくいかなければ「型が違う」となるかもしれません。

※試してはいません。

未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 17:56
masaさんお返事ありがとうございます。

ちなみにエラーメッセージの内容は引数の数または型が正しくありません。
PLS-00306と出ます。

宜しくお願いします。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-10-23 18:03
NAOさん、masaさんお返事ありがとうございます。

ちなみにストアドの方の引数をtest in varcharのみにして
実行してみたところエラーとならず処理が終了しました。

しかし値を返していないのでSQLがきちんと実行されて
値が取得できたかどうかはわかりませんが・・・

宜しくお願いします。

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