"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存储过程时最好在程序中设置存储过程参数大小,否则可能会报以上错误哦,希望给碰到此问题的朋友一些帮助,虽然这个错误的原因可能是其它方面的.
21中医助手
 
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号