9
votes

"ORA-01036: Nom de variable illégal / Number \ n" pour Oracle Clob en C #

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


1 commentaires

Pourquoi est-ce une question CW?


5 Réponses :


1
votes

Essayez simplement xxx

remplacer : TEMPCLOB avec TEMPCLOB .


0 commentaires

0
votes

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: xxx


0 commentaires

0
votes

On dirait que vous utilisez peut utiliser le client Microsoft Oracle.

Essayez d'utiliser le client Oracle 11 avec ODP.NET pour 4.0. Cela donne les meilleurs résultats lorsque vous traitez avec Clob.


0 commentaires

1
votes

Essayez d'ajouter: xxx

Après avoir appelé vos paramètres.


0 commentaires

0
votes

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. xxx


0 commentaires