Oracle
 sql >> Base de données >  >> RDS >> Oracle

Problèmes d'appel de procédure stockée à partir de C # avec un grand CLOB

J'ai découvert qu'il existe une autre façon de contourner le problème! Mon collègue m'a sauvé la vie en me dirigeant vers ce blog, qui dit :

Définissez la valeur du paramètre lorsqueBeginTransaction a déjà été appelée sur la DbConnection.

Pourrait-il être plus simple? Le blog concerne Oracle.DataAccess , mais cela fonctionne aussi bien pour System.Data.OracleClient .

En pratique, cela signifie :

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();
}