Oracle
 sql >> Database >  >> RDS >> Oracle

Problemi durante la chiamata della stored procedure da C# con CLOB di grandi dimensioni

Ho scoperto che c'è un altro modo per aggirare il problema! Il mio collega dipendente mi ha salvato la giornata indicandomi questo blog, che dice:

Impostare il valore del parametro quandoBeginTransaction è già statochiamato su DbConnection.

Potrebbe essere più semplice? Il blog fa riferimento a Oracle.DataAccess , ma funziona altrettanto bene per System.Data.OracleClient .

In pratica questo significa:

varcmd = new OracleCommand("LoadXML", _oracleConnection);
cmd.CommandType = CommandType.StoredProcedure;

var xmlParam = new OracleParameter("XMLFile", OracleType.Clob);
cmd.Parameters.Add(xmlParam);

// DO NOT assign the parameter value yet in this place

cmd.Transaction = _oracleConnection.BeginTransaction();
try
{
    // Assign value here, AFTER starting the TX
    xmlParam.Value = xmlWithWayMoreThan4000Characters;

    cmd.ExecuteNonQuery();
    cmd.Transaction.Commit();
}
catch (OracleException)
{
    cmd.Transaction.Rollback();
}