错误:ORA-06502: PL/SQL: numeric or value error: character string buffer too small
原因:
1. 较旧版本的ORACLE 11曾存在过存储过程的输出参数varchar2类型时出现过;
解决办法:升级ORACLE。现在这种问题应该很少遇到。
2.调用方没有指定此输出参数varchar2类型的大小,或者少于存储过程传出的大小;
解决办法:增加传出参数的大小
3.是ODP.NET参数定义上,程序员疏忽导致。
解决办法:请认真看参数的构造函数或者oracleCommand.Parameters.Add的重载方法。
正确的写法如下:
//注意200是Size,null是value
command.Parameters.Add("PS_MSG", OracleDbType.Varchar2, 200, null, ParameterDirection.Output);
var param = new OracleParameter();
param.ParameterName = "PS_MSG";
param.Direction = ParameterDirection.Output;
param.OracleDbType = OracleDbType.Varchar2;
//param.DbType = DbType.String;
param.Size = 200;
command.Parameters.Add(param);