This has something to do with the ORacle11g.
Like what you said, instead of real null value, it is a null string.
If you are checking from OracleDbType, the null in OracleDbType and CLR Datatype both inherits from INullable so below was my solution:
((INullable) rowParamDBType.Value).IsNull
To have a cleaner solution, you can place this in extension.
If your row is a DbType, you can check for param.Value==DbNull.Value.
While the above will work too, the real solution to this problem is use the OracleDbTypeEx instead of OracleDbType in your OracleParameter declaration. OracleDbTypeEx will return the value to DBType and because of this it will recognize the DBNull. See example code below.
command.Parameters.Add(new OracleParameter
{
ParameterName = "param_out",
OracleDbTypeEx = OracleDbType.Decimal,
Direction = ParameterDirection.Output
});
if (command.Parameters["param_out"].Value != Convert.DBNull)
{
//your code here
}