- PR -

ODP.NETでストアドプロシージャを使用した時の文字列出力について

1
投稿者投稿内容
未来
会議室デビュー日: 2003/09/12
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 2003-09-12 11:06
初投稿の未来と申します、これからどうぞよろしくお願いします。

さっそく質問なのですが、ODP.NETでストアドプロシージャを使用し検索した文字を出力しようとコードを組んだのですが、ORA06502:PL/SQL:数値または値のエラー:文字列バッファが小さすぎます。とエラーが出てしまいます。

処理はDBのユニークキーである日付から数値を二つとそれに対する演算子を出力する、というものです。いろいろ試した結果、演算子(文字)をコメントアウトすると2つの数値のみ出力されましたので問題はここだと判断したのですが、どうにも解決法が見つかりません。

よろしければ、ご教授よろしくお願いします。

ちなみに環境はVisual Studio .NET 2003とOracle9iです。
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-09-12 12:58
PL/SQLコードなので、こちらの方が良いかも?
http://otn.oracle.co.jp/forum/index.html

エラー箇所の、PL/SQLコードを掲示できませんか?
ダンクーガ
常連さん
会議室デビュー日: 2003/03/14
投稿数: 48
お住まい・勤務地: 千葉県
投稿日時: 2003-09-12 13:52
始めまして
検索した文字を出力って画面側へはOUTPUT引数で出力してます?それともREF CURSORとか使って返してます?
未来
会議室デビュー日: 2003/09/12
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 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/03/14
投稿数: 48
お住まい・勤務地: 千葉県
投稿日時: 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/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-09-12 19:49
引用:

Dim enzansiParam As New Client.OracleParameter("enzansi", Client.OracleDbType.Varchar2)



既に、ダンクーガさんがご回答済みですが...同意見です。

Dim enzansiParam As New Client.OracleParameter("enzansi", Client.OracleDbType.Varchar2, 1000)
未来
会議室デビュー日: 2003/09/12
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 2003-09-15 08:51
まず、返信が遅れましたことをお詫びします。
ななさん、ダンクーガさん本当にありがとうございます。

今すぐにでも教えていただいたことを実行したいのですが、
今日から水曜日あたりまで急な仕事が入り、実行することができません。
ですが、必ず木曜日にはこちらに結果をお知らせにきます。

それでは、失礼いたします。
1

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