“ORA-01036: illégal nom de la variable/nombre\n” oracle clob en C#
Lorsque j'essaie de créer une procédure stockée oracle appel avec clob
d'entrée et de sortie en C#, j'obtiens l'erreur suivante:
ORA-01036: illegal variable name/number\n
Voici le code lui-même:
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();
Pourquoi est-ce un CW question?
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Juste essayer
Remplacer
:tempclob
avectempclob
.OriginalL'auteur
Essayez d'ajouter:
une fois que vous appelez de vos paramètres.
OriginalL'auteur
Lequel des deux appels à la méthode ExecuteNonQuery() est la génération de l'erreur? Je devine que c'est la deuxième.
Je ne fais pas de C#, mais à partir de plusieurs exemples que j'ai trouvé en ligne, il ressemble quand vous utilisez le StoredProcedure type de commande, vous ne voulez pas créer de réelles OracleParameter objets. Au lieu de cela, vous initialiser les paramètres comme ceci:
OriginalL'auteur
On dirait que vous pourriez être à l'aide de Microsoft Oracle client.
Essayez d'utiliser l'Oracle 11 client avec ODP.Net pour la version 4.0.
Ce qui donne les meilleurs résultats lorsqu'ils traitent avec des clob.
OriginalL'auteur
De liaison variable à un anonyme pl/sql bloc n'est pas pris en charge. Utiliser une procédure et de définir tous les paramètres à la place.
OriginalL'auteur