A solution is to create an OracleClob object that receives an Open() connection and then we write the value as an Array of Bytes to it.
If you are using EF and Context you can access the conectionString as follows:
string connectionString = _context.Database.GetDbConnection().ConnectionString;
The code would look like this:
using OracleConnection connection = new(connectionString);
try
{
connection.Open(); //required
byte[] arrayByte = System.Text.Encoding.Unicode.GetBytes(audit.AuditRecord);
OracleClob oracleClob = new (connection);
oracleClob.Write(arrayByte, 0, arrayByte.Length);
var parameters = new OracleParameter[]
{
new OracleParameter("param1", OracleDbType.Varchar2, valueParam1, ParameterDirection.Input),
new OracleParameter("param_clob", OracleDbType.Clob, oracleClob, ParameterDirection.Input),
new OracleParameter("p_refcursor", OracleDbType.RefCursor, ParameterDirection.Output)
};
OracleCommand cmd= new("SCHEMA.STORED_PROCEDURE_NAME", connection)
{
CommandType = CommandType.StoredProcedure,
};
cmd.Parameters.AddRange(parameters);
cmd.ExecuteNonQuery();
//getting the returned values
var result = (OracleRefCursor)cmd.Parameters["p_refcursor"].Value;
var reader = result.GetDataReader();
reader.Read();
// To access the returned values
//reader.GetOracleValue(0)
//reader.GetOracleValue(1)
//reader.GetOracleValue(2)
}
finally
{
connection.Close();
}