"ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小"的解决,总结一下oracle开发的小经验

天在写一个简单的oracle存储过程时,突然报以下错误:


“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在"FRAME_DBA.PKG_FRAMETABLE900_MANAGE", line 14
ORA-06512: 在line 1
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: Oracle.DataAccess.Client.OracleException: ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在"FRAME_DBA.PKG_FRAMETABLE900_MANAGE", line 14
ORA-06512: 在line 1

源错误:


行 223:
行 224:                //Execute the command
行 225:                int val = cmd.ExecuteNonQuery();
行 226:                cmd.Parameters.Clear();
行 227:                return val;
 

源文件: H:\NewMis\Core\OracleHelper.cs    行: 225

堆栈跟踪:


[OracleException: ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在"FRAME_DBA.PKG_FRAMETABLE900_MANAGE", line 14
ORA-06512: 在line 1]
   Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) +303
   Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src) +45
   Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() +2492
   PFPMIS.Core.OracleHelper.ExecuteNonQuery(String connectionString, CommandType cmdType, String cmdText, OracleParameter[] commandParameters) in H:\NewMis\Core\OracleHelper.cs:225
   PFPMIS.Account.Data.CommonData.GetUnitNameByCode(String unitCode) in H:\NewMis\AccountsData\CommonData.cs:45
   PFPMIS.Account.Business.CommonBuss.BuildUnitTree(String unitCode, TreeView myTv) in H:\NewMis\AccountsBusiness\CommonBuss.cs:95
   PFPMIS.Web.Index.AutoTree.Page_Load(Object sender, EventArgs e) in H:\NewMis\Index\AutoTree.aspx.cs:31
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061

 


--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.210 




赶紧调试跟踪,一直跟踪到存储过程都没有任何问题,存储过程参数顺序和值都正常,用pl/sql调试存储过程输出也没有任何问题。

到网上找了些解决方法,没有任何效果,仔细看报错信息,突然想到会不会是oracle没有为我的变量分配存储空间,因为我的输入输出变量都没有设置大小,马上加上试了一下,OK。

总结一下结论:在.net平台下,用ODP.net调用oracle存储过程时最好在程序中设置存储过程参数大小,否则可能会报以上错误哦,希望给碰到此问题的朋友一些帮助,虽然这个错误的原因可能是其它方面的.


你可能感兴趣的:(oracle)