Question

J'utilise ODP.NET (migration du fournisseur de Microsoft) et je suis bloqué sur une procédure stockée qui renvoie un refcursor. J'ai la procédure PL / SQL suivante (je l'ai un peu modifiée pour la rendre plus générale):

PROCEDURE MyProc(parameter_no1 IN NUMBER, parameter_no2 IN NUMBER, RETCURSOR OUT ret_type) AS
BEGIN
  OPEN RETCURSOR FOR
  SELECT   ad.logo logo 
  FROM    tab_a a, tab_h h 
  WHERE  a.id IS NOT NULL 
  AND    a.h_id = h.id 
  AND    a.no1 = parameter_no1
  AND    a.no2= parameter_no2;
END HanteraLogotype;

Et puis j'ai le code C suivant pour l'appeler:

internal void RefCursorDataReader()
{
  OracleCommand cmd = new OracleCommand("ABC$MYPACKAGE.MyProc", new OracleConnection(_constr));
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Connection.Open();
  cmd.BindByName = true;

  OracleParameter p = cmd.Parameters.Add("parameter_no1", OracleDbType.Decimal);
  p.Value = 12345678;
  p.Direction = ParameterDirection.Input;

  p = cmd.Parameters.Add("parameter_no2", OracleDbType.Decimal);
  p.Value = 123456;
  p.Direction = ParameterDirection.Input;

  p = cmd.Parameters.Add("RETCURSOR", OracleDbType.RefCursor);
  p.Direction = ParameterDirection.Output;

  OracleDataReader reader = cmd.ExecuteReader();

  if (reader.Read())
  {
    System.Diagnostics.Debug.WriteLine(reader[0].GetType().ToString());
  }

  cmd.Connection.Close();
}

Et quand je lance ceci, je continue à avoir cette exception:

  

ORA-03106: erreur fatale de protocole de communication à deux tâches

J'ai essayé de nombreuses variantes de paramètres, leur type, leur ordre, etc., mais rien ne semble les aider. C'est le reader.Read () qui lève l'exception. J'apprécierais vraiment l'aide sur celui-ci!

Ajouté: le type_retre est défini comme suit:

  

TYPE ret_type IS REF CURSOR;

Était-ce utile?

La solution

Cela ressemble à un bug. L'erreur 3106 est une mauvaise erreur qui ne devrait jamais se produire. Je suis sûr qu'il y a une solution de contournement cependant !!

Le meilleur endroit pour poser des questions sur ODP.NET est terminé sur le forum OTN ODP.NET. Si j'étais vous, je posterais ceci là-bas:

http://forums.oracle.com/forums/forum .jspa? forumID = 146 & amp; start = 0

Recherchez également "3106" sur ce forum en particulier

.

Autres conseils

Je suis passé à la version 11G ODP.NET

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top