J'essaie d'exécuter une procédure qui renvoie une procédure stockée. Ma version d'Oracle DB est 9.2 et la version ODP .NET est 10.2.0.100ODP .NET Obtenir une sortie SYSREFCURSOR. {Erreur "type de colonne non pris en charge"}
Mon code C# ressemble à ceci.
OracleCommand od = new OracleCommand();
od.Connection = oc;
OracleParameter opBranchNo;
OracleParameter opSysRef;
od.CommandType = System.Data.CommandType.StoredProcedure;
od.CommandText = "pkg_fetchleaseinfo.proc_fetchleaseheader";
opBranchNo = new OracleParameter("IBRANCH_ID", OracleDbType.Varchar2, 3, "044");
opBranchNo.Direction = System.Data.ParameterDirection.Input;
od.Parameters.Add(opBranchNo);
opSysRef = new OracleParameter();
opSysRef.ParameterName = "REC_SET";
opSysRef.Direction = System.Data.ParameterDirection.Output;
opSysRef.OracleDbType = OracleDbType.RefCursor;
od.Parameters.Add(opSysRef);
od.Prepare();
od.ExecuteNonQuery();
Oracle.DataAccess.Types.OracleRefCursor sysref =
(Oracle.DataAccess.Types.OracleRefCursor)opSysRef.Value;
return sysref.GetDataReader();
//OracleDataReader dr1 =
//((Oracle.DataAccess.Types.OracleRefCursor)opSysRef.Value).GetDataReader();
//return dr1;
Mon code Oracle procédure ressemble à ce
PROCEDURE proc_fetchleaseheader(ibranch_id IN VARCHAR2,
rec_set OUT SYS_REFCURSOR) IS x_rec genericCursor;
BEGIN
OPEN x_rec FOR SELECT getleaseheaderrows(ibranch_id) FROM dual;
rec_set := x_rec;
EXCEPTION WHEN OTHERS THEN
RAISE;
END;
Lorsque j'exécute mon code, la partie où je tente un getReader() échoue avec un message d'erreur UNSUPPORTED COLONNE DATATYPE.
Pour une raison quelconque, je n'ai pas pu formater le code de procédure stockée correctement – abhi
'getleaseheaderrows (ibranch_id)' est une fonction définie par l'utilisateur. Quel type de données renvoie-t-il? Vos trucs ODP fonctionnent-ils si la procédure stockée appelle quelque chose de plus simple, comme 'select dummy from dual'? – APC
getleaseheaderrows (ibranch_id) est une fonction qui retourne un REF CURSOR. Si j'essaye avec SELECT DUMMY FROM DUAL; la fonction renvoie une erreur qui ressemble à ceci. Erreur System.NullReferenceException: La référence d'objet n'est pas définie sur une instance de un objet. – abhi