.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

posted @ 2021-02-26 11:09  博客萌新  阅读(243)  评论(0编辑  收藏  举报