sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kalder man en Oracle-funktion med en Ref Cursor som Out-parameter fra C#?

Det kan du sikkert. Der er et par ting at være på vagt over for, men her er en testcase

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. Jeg har fundet ud af, at funktioner kan lide at have returværdien som DEN FØRSTE paraminere samlingen
  2. BindByName er som standard FALSE, så det er som standard BIND BY POSITION

Ellers er det ret ligetil:

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

Gå nu til din Oracle Home-mappe for at få flere eksempler og se @ Ref cursor-eksemplerne i ODP.NET

for eksempel:%oracle-klienthjem%\odp.net\samples\4\RefCursor

hth




  1. GreenDAO understøtter flere relationer mellem tabeller

  2. Automatisk plankorrektion i SQL Server

  3. Databasekorrpution i MS Access og hvordan man handler

  4. Forespørgselsoptimeringsteknikker i SQL Server:5 bedste fremgangsmåder til at øge forespørgselsydeevnen