- - PR -
ODP.NETでストアドプロシージャを使用した時の文字列出力について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-09-12 11:06
初投稿の未来と申します、これからどうぞよろしくお願いします。
さっそく質問なのですが、ODP.NETでストアドプロシージャを使用し検索した文字を出力しようとコードを組んだのですが、ORA06502:PL/SQL:数値または値のエラー:文字列バッファが小さすぎます。とエラーが出てしまいます。 処理はDBのユニークキーである日付から数値を二つとそれに対する演算子を出力する、というものです。いろいろ試した結果、演算子(文字)をコメントアウトすると2つの数値のみ出力されましたので問題はここだと判断したのですが、どうにも解決法が見つかりません。 よろしければ、ご教授よろしくお願いします。 ちなみに環境はVisual Studio .NET 2003とOracle9iです。 | ||||
|
投稿日時: 2003-09-12 12:58
PL/SQLコードなので、こちらの方が良いかも?
http://otn.oracle.co.jp/forum/index.html エラー箇所の、PL/SQLコードを掲示できませんか? | ||||
|
投稿日時: 2003-09-12 13:52
始めまして
検索した文字を出力って画面側へはOUTPUT引数で出力してます?それともREF CURSORとか使って返してます? | ||||
|
投稿日時: 2003-09-12 16:23
ななさん、ダンクーガさん返信ありがとうございます。
提示するものが少ないですね、申し訳ありませんでした。 紹介していただいたサイトは今から見てみます。 create or replace procedure select_record(i_year varchar2,i_month varchar2,i_day varchar2,jousuu out number,enzansi out varchar2,kasuu out number) is begin select 上数,演算子,下数 into jousuu,enzansi,kasuu from TBL結果 where 年=i_year and 月=i_month and 日=i_day; end; / 変な改行になってしまっていますが気にしないでください(^^; Dim odpcmdSel As New Client.OracleCommand odpcmdSel.Connection = p_odpConn Dim i_yearParam As New Client.OracleParameter("i_year", Client.OracleDbType.Varchar2) i_yearParam.Direction = ParameterDirection.Input i_yearParam.Value = txtCountYear.Text.Trim Dim i_monthParam As New Client.OracleParameter("i_month", Client.OracleDbType.Varchar2) i_monthParam.Direction = ParameterDirection.Input i_monthParam.Value = txtCountMonth.Text.Trim Dim i_dayParam As New Client.OracleParameter("i_day", Client.OracleDbType.Varchar2) i_dayParam.Direction = ParameterDirection.Input i_dayParam.Value = txtCountDay.Text.Trim Dim jousuuParam As New Client.OracleParameter("jousuu", Client.OracleDbType.Int32) jousuuParam.Direction = ParameterDirection.Output jousuuParam.Value = 0 Dim enzansiParam As New Client.OracleParameter("enzansi", Client.OracleDbType.Varchar2) enzansiParam.Direction = ParameterDirection.Output enzansiParam.Value = "" Dim kasuuParam As New Client.OracleParameter("kasuu", Client.OracleDbType.Int32) kasuuParam.Direction = ParameterDirection.Output kasuuParam.Value = 0 odpcmdSel.Parameters.Add(i_yearParam) odpcmdSel.Parameters.Add(i_monthParam) odpcmdSel.Parameters.Add(i_dayParam) odpcmdSel.Parameters.Add(jousuuParam) odpcmdSel.Parameters.Add(enzansiParam) odpcmdSel.Parameters.Add(kasuuParam) odpcmdSel.CommandText = "select_record" odpcmdSel.CommandType = CommandType.StoredProcedure Try odpcmdSel.ExecuteNonQuery() lblKekka.Text = jousuuParam.Value & enzansiParam.Value & kasuuParam.Value Catch ex As Exception MsgBox(ErrorToString, MsgBoxStyle.Critical + MsgBoxStyle.OKCancel) End Try このとおり、OUTPUTを使っています。 大変拙いプログラムで申し訳ありませんが、よろしくお願いします。 | ||||
|
投稿日時: 2003-09-12 16:55
ODP.NETを使ってますよね?多分引数の定義するときにCommand.Parameterの引数にこんな感じで桁数を指定できるので表の項目の桁数と合わせればいいんじゃないかなと思うのですが・・・駄目だったらごめんなさい。
Dim OraCmd As OracleCommand OraCmd.Parameters.Add("OUT_ERROBJ", OracleDbType.Varchar2, 255, DBNull.Value, ParameterDirection.Output) | ||||
|
投稿日時: 2003-09-12 19:49
既に、ダンクーガさんがご回答済みですが...同意見です。 Dim enzansiParam As New Client.OracleParameter("enzansi", Client.OracleDbType.Varchar2, 1000) | ||||
|
投稿日時: 2003-09-15 08:51
まず、返信が遅れましたことをお詫びします。
ななさん、ダンクーガさん本当にありがとうございます。 今すぐにでも教えていただいたことを実行したいのですが、 今日から水曜日あたりまで急な仕事が入り、実行することができません。 ですが、必ず木曜日にはこちらに結果をお知らせにきます。 それでは、失礼いたします。 |
1