Algumas vezes criamos procedures em base de dados Oracle que tem parâmetros do tipo Input e são opcionais. E dentro desse parâmetro opcional podemos programar internamente na procedure alguma lógica como por exemplo em campo de data se não receber data especificada utilizar data atual.
O modo mais lógico de chamar parametro sem especificar valor seria simplesmente passar null, mas ao fazer isto prepare-se para receber uma Exception. :)
A solução nestes casos é então passar o valor DBNull.Value.
Segue exemplo abaixo utilizando drive C# da Oracle com sessão de Fluent Nhibernate :
using (var command = (OracleCommand)Session.Connection.CreateCommand())
{
command.CommandText = "sp_procedure001";
command.CommandType = CommandType.StoredProcedure;
if (inicio == DateTime.MinValue && termino == DateTime.MinValue)
{
command.Parameters.Add("pi_dt_inicio", OracleDbType.Date, DBNull.Value, ParameterDirection.Input);
command.Parameters.Add("pi_dt_termino", OracleDbType.Date, DBNull.Value, ParameterDirection.Input);
}
else
{
command.Parameters.Add("pi_dt_inicio", OracleDbType.Date, inicio, ParameterDirection.Input);
command.Parameters.Add("pi_dt_termino", OracleDbType.Date, termino, ParameterDirection.Input);
}
command.Parameters.Add("po_qtde_kg", OracleDbType.Double, ParameterDirection.Output);
command.ExecuteNonQuery();
double peso;
double.TryParse(command.Parameters["po_qtde_kg"].Value.ToString().Replace(".", ","), out peso);
result.Add("peso", peso);
}
Comentários
Postar um comentário