I recently ran into this error when trying to run a stored proc from a c# app. Looking at all of values that I was passing in, as well as the declarations in the stored proc,
nothing was beyond size limit of the given variables.
OracleCommand cmd = new OracleCommand(@"Begin INSERT_CMDData(
P_PROJECT_NO => :P_PROJECT_NO,
P_JOB_NO => :P_JOB_NO,
P_ACTIVITY_NO => :P_ACTIVITY_NO,
P_CLOCK_TIME => Sysdate,
P_TRX_TYPE => :P_TRX_TYPE,
P_IP_ADDR => :P_IP_ADDR,
P_RETURN_STRING => :P_RETURN_STRING
); End;".Replace(Environment.NewLine, " "));
cmd.CommandType = CommandType.Text;
#region Params
cmd.Parameters.Add("p_project_no", OracleDbType.Varchar2).Value = projectNumber;
cmd.Parameters.Add("p_job_no", OracleDbType.Varchar2).Value = jobNumber;
cmd.Parameters.Add("p_activity_no", OracleDbType.Varchar2).Value = activityNumber;
//cmd.Parameters.Add("p_clock_time", OracleDbType.Date).Value = clockTime;
cmd.Parameters.Add("p_trx_type", OracleDbType.Varchar2).Value = timeClockTransactionType(transactionType);
cmd.Parameters.Add("p_return_success", OracleDbType.Int32, ParameterDirection.Output);
cmd.Parameters.Add("p_return_string", OracleDbType.Varchar2, ParameterDirection.Output);
#endregion
using (cmd.Connection = new OracleConnection(AppConfig.General.ConnectionString))
{
cmd.Connection.Open();
cmd.ExecuteNonQuery();
Response response = new Response();
response.Success = (Int32)(OracleDecimal)cmd.Parameters["p_return_success"].Value;
response.DisplayMessage = cmd.Parameters["p_return_string"].Value.ToString();
return response.DisplayMessage;
}
The issue turned to be the return variables and not and not the inserted values. I simply needed to explicitly add the size to returned varchar.
cmd.Parameters.Add("p_return_string", OracleDbType.Varchar2, ParameterDirection.Output);
Had to be changed to
cmd.Parameters.Add("p_return_string", OracleDbType.Varchar2, 4000).Direction = ParameterDirection.Output;