Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment appeler une fonction Oracle avec un curseur de référence comme paramètre de sortie à partir de C # ?

Vous pouvez certainement. Il y a quelques pièges dont il faut se méfier, mais voici un cas de test

create or replace function testodpRefCursor(
                  uniqueId    IN NUMBER 
                 ,resultItems OUT NOCOPY SYS_REFCURSOR) RETURN NUMBER
                 IS

 BEGIN
      OPEN resultItems for select level from dual  connect by level < uniqueId ;
      return 1;
 END testodpRefCursor;
  1. J'ai trouvé que les fonctions aiment avoir la valeur de retour comme LA PREMIÈRE param la collection
  2. BindByName est FALSE par défaut, il est donc par défaut BIND BY POSITION

Sinon, c'est assez simple :

  OracleCommand cmd = new OracleCommand("TESTODPREFCURSOR", con);
  cmd.CommandType   = CommandType.StoredProcedure;
  cmd.BindByName = true;
  // Bind 


  OracleParameter oparam = cmd.Parameters.Add("ReturnValue", OracleDbType.Int64);
  oparam.Direction = ParameterDirection.ReturnValue ;       

  OracleParameter oparam0 = cmd.Parameters.Add("uniqueId", OracleDbType.Int64);
  oparam0.Value = 5 ;
  oparam0.Direction = ParameterDirection.Input;

  OracleParameter oparam1 = cmd.Parameters.Add("resultItems", OracleDbType.RefCursor);
  oparam1.Direction = ParameterDirection.Output;




  // Execute command
  OracleDataReader reader;
  try
  {
    reader = cmd.ExecuteReader();

    while(reader.Read() ){
        Console.WriteLine("level: {0}", reader.GetDecimal(0));  
    }

  } ...

Maintenant, pour plus d'exemples, allez dans votre répertoire Oracle Home et regardez @ les exemples de curseur Ref dans ODP.NET

par exemple :%oracle client home%\odp.net\samples\4\RefCursor

hth