极端诡异:调用oracle存储过程传integer参数报错!
引用的是Oracle.DataAccess.Client
存储过程定义:
procedure SP_ManualIn(in_shelftype in varchar2,
in_DeviceId in varchar2,
in_isOdd in varchar2,
in_MaterialId in varchar2,
in_MaterialNum in integer,
in_PileType in varchar2,
in_isFinished in varchar2,
in_InShiftId in varchar2,
in_Informid in varchar2,
out_LogisticsId out varchar2,
out_sqlcode out binary_integer,
out_sqlerrm out varchar2) is
begin
--这里将输入参数写入日志备查,仅仅是看调用的时候是否进入到函数主体
end;
注意上述参数有一个是integer,即in_MaterialNum in integer,
我在传入参数的时候这样定义:
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_MANUALIN";
OracleParameter In_MaterialNum = new OracleParameter();
In_MaterialNum.ParameterName = "In_MaterialNum";
In_MaterialNum.OracleDbType = OracleDbType.Int16;
In_MaterialNum.Direction = ParameterDirection.Input;
In_MaterialNum.Value = 10;
cmd.Parameters.Add(In_MaterialNum);
在调用的时候报错:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1
如果将in_MaterialNum in integer换成其他类型如varchar2则一切正常。
上述废话是为了说明问题的根源就在integer类型。
In_MaterialNum.OracleDbType = OracleDbType.Int16;换成int32等等都试过了,都是报一样的错误。
在不修改存储过程的情况下(因为其他原因,不能修改),怎么解决这个问题?希望大家指点,有条件的朋友帮忙验证一下,谢谢各位。