sql >> Databáze >  >> RDS >> Oracle

Jak volat funkci Oracle s referenčním kurzorem jako out-parametrem z C#?

Určitě můžeš. Existuje několik problémů, na které je třeba se mít na pozoru, ale zde je testovací případ

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. Zjistil jsem, že funkce má rádo hodnotu ReturnValue jako PRVNÍ paramin kolekce
  2. BindByName je ve výchozím nastavení FALSE, takže výchozí je BIND BY POSITION

Jinak je to docela přímočaré:

  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));  
    }

  } ...

Nyní pro více ukázek přejděte do domovského adresáře Oracle a podívejte se na @ ukázky kurzoru Ref v ODP.NET

například:%oracle client home%\odp.net\samples\4\RefCursor

hth




  1. SQL Server Vysvětlení NĚKTERÉHO operátora

  2. Oracle Data Mining (ODM) – instalace a nastavení

  3. SQL:Jaké je výchozí pořadí dotazů?

  4. Najděte počet sloupců v tabulce