Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да извика функция на Oracle с Ref Cursor като Out-параметър от C#?

Сигурно можеш. Има няколко затруднения, с които трябва да внимавате, но ето един тестов случай

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. Открих, че функции обича да има ReturnValue като ПЪРВОТО парамин колекцията
  2. BindByName е по подразбиране FALSE, така че по подразбиране е BIND BY POSITION

В противен случай е доста ясно:

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

  } ...

Сега за повече проби отидете във вашата начална директория на Oracle и вижте @ примерите на курсора Ref в ODP.NET

например:%oracle client home%\odp.net\samples\4\RefCursor

hth




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се създаде екземпляр на грешка на доставчика на OLE DB като потребител на удостоверяване на Windows

  2. Какво е името на ограничението по подразбиране в Oracle?

  3. Разлика между клауза WITH и подзаявка?

  4. Деклариране и задаване на променливи в оператор Select

  5. Заявката Oracle Pivot дава колони с кавички около имената на колоните. Какво?