Problème de paramètre avec Oracle RefCursor
-
06-07-2019 - |
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;
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