.net调用orcale存储过程的out参数问题
写了一个存储过程在.NET程序中调用发现catch到一个错误
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small ORA-06512: 在 "BIS.PRO_FIELDSHOW_INSERT", line 61 ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small ORA-06512: 在 line 1
在plsql中调用存储过程,没有问题。
那么是代码的问题了,我的代码:
OracleParameter[] parameters = { new OracleParameter("as_card_id",OracleDbType.Varchar2,cardId,ParameterDirection.Input),//卡号 new OracleParameter("as_apply_no",OracleDbType.Varchar2,applyNo,ParameterDirection.Input),//单据号 new OracleParameter("as_operator",OracleDbType.Varchar2,opNo,ParameterDirection.Input),//扣费操作员 new OracleParameter("r_ret",OracleDbType.Varchar2,"",ParameterDirection.Output),//返回值 1成功 -1失败 new OracleParameter("r_errmsg",OracleDbType.Varchar2,"",ParameterDirection.Output),//返回错误信息或成功信息 };
错误所说的line多少行刚好就是给r_errmsg赋值的语句。那么就是这个out参数传递过去的时候出错了。
ORA-06502的错误信息为字符缓冲区太小,我查了一下oracle的字符最大长度为4000,放入我要返回的字符串是绰绰有余的,那么就是,net传递过去的out参数的字符长度太小,查看了一下他有个重载方法可以设置参数的长度。
以下是正确的代码:
new OracleParameter("r_ret",OracleDbType.Varchar2,4000,"",ParameterDirection.Output),//返回值 1成功 -1失败 new OracleParameter("r_errmsg",OracleDbType.Varchar2,4000,"",ParameterDirection.Output),//返回错误信息或成功信息
设置一下size即可。
转自:https://www.cnblogs.com/AnnsBlog/p/8743349.html