Lorsque j'essaie de créer un appel de procédure stocké Oracle avec CLOB code> entrée et sortie en C #, je reçois l'erreur suivante:
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText =
@"declare xx clob;
begin dbms_lob.createtemporary(xx, false, 0);
:tempclob := xx; end;";
command.Parameters.Add(new OracleParameter("tempclob", OracleType.Clob))
.Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
//byte[] tempbuff = new byte[10000];
byte[] tempbuff = System.Text.Encoding.Unicode.GetBytes(generateXMLMessage());
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff, 0, tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "InsertMessageAndGetResponseWRP";
command.CommandType = CommandType.StoredProcedure;
//command.Parameters
//.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.Parameters.Add(new OracleParameter("iSourceSystem", OracleType.VarChar))
.Value = "XXX";
command.Parameters.Add(new OracleParameter("iMessage", OracleType.Clob))
.Value = tempLob;
command.Parameters.Add(new OracleParameter("iResponseMessage", OracleType.Clob)).Direction = ParameterDirection.Output;
command.Parameters.Add(new OracleParameter("retVar ", OracleType.Int32)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
transaction.Commit();
5 Réponses :
Essayez simplement remplacer : TEMPCLOB code> avec
TEMPCLOB code>. P> P> P>
Lequel des deux appels à exécutenonquery () génère l'erreur? Je suppose que c'est le second.
Je ne fais pas c #, mais à partir de plusieurs exemples que j'ai trouvés en ligne, on dirait que lorsque vous utilisez le type de commande STORDPROCEDURE, vous ne voulez pas créer d'objets réels Oracleparamètre. Au lieu de cela, vous initialisez les paramètres comme celui-ci: p>
On dirait que vous utilisez peut utiliser le client Microsoft Oracle. P>
Essayez d'utiliser le client Oracle 11 avec ODP.NET pour 4.0. Cela donne les meilleurs résultats lorsque vous traitez avec Clob. p>
Essayez d'ajouter: Après avoir appelé vos paramètres. p> p>
La variable de liaison à un bloc PL / SQL anonyme n'est pas prise en charge. Utilisez une procédure et définissez tous les paramètres à la place.
Pourquoi est-ce une question CW?