J'utilise ODP.NET (migration depuis le fournisseur Microsoft) et je suis bloqué sur une procédure stockée qui renvoie un refcursor. Je les éléments suivants Procédure PL/SQL (Je l'ai changé un peu pour le rendre plus général):Problème de paramètre avec Oracle RefCursor
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 je le folloing code C# 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, je continue à obtenir 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 l'reader.Read()
qui lance l'exception. J'apprécierais vraiment l'aide sur celui-ci!
Ajouté: le ret_type est défini comme:
ret_type TYPE EST REF CURSOR;
Le type de logo est LONG RAW , et cela semble être le problème. Si je le change en nombre, ça marche. – kaze
Ah, les types de données LONG ont été dépréciés dans Oracle 8, je crois. LOB les a remplacés. –