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

Как да върна RefCursor от функцията на Oracle?

Мисля, че ви липсва sqlCom.ExecuteNonQuery();

също, вместо да стартирате select func_test(7) от dual; позволява да го превключите, за да стартирате функцията и да прехвърлите param

  OracleConnection oracleCon = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);


  // Set the command

  string anonymous_block = "begin " +
                              "  :refcursor1 := func_test(7) ;" +
                              "end;";  
 //fill in your function and variables via the above example
  OracleCommand sqlCom= con.CreateCommand();
  sqlCom.CommandText = anonymous_block;

  // Bind 
  sqlCom.Parameters.Add("refcursor1", OracleDbType.RefCursor);
  sqlCom.Parameters[0].Direction = ParameterDirection.ReturnValue;

  try 
  {
    // Execute command; Have the parameters populated
    sqlCom.ExecuteNonQuery();

    // Create the OracleDataAdapter
    OracleDataAdapter da = new OracleDataAdapter(sqlCom);

    // Populate a DataSet with refcursor1.
    DataSet ds = new DataSet();
    da.Fill(ds, "refcursor1", (OracleRefCursor)(sqlCom.Parameters["refcursor1"].Value));

    // Print out the field count the REF Cursor
    Console.WriteLine("Field count: " + ds.Tables["refcursor1"].Columns.Count);
  }
  catch (Exception e)
  {
    Console.WriteLine("Error: {0}", e.Message);
  }
  finally
  {
    // Dispose OracleCommand object
    cmd.Dispose();

    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();}

това се основава на примерния ODP, който може да се намери @ %ora_home%\Client_1\ODP.NET\samples\RefCursor\Sample5.csproj

Ако искате да избегнете (за по-добро или за най-лошото!) персонализираната колекция от параметри за всяко извикване на proc/function, можете да заобиколите това, като използвате анонимни блокове във вашия код, промених (за пореден път неизпробван!) кода по-горе, за да отрази това, за да го отразите. тази техника. Ето един хубав блог (от никой друг освен Марк Уилямс), показващ тази техника.http://oradim.blogspot.com/2007/04/odpnet-tip-anonymous-plsql-and.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Метаданни относно типове записи на ниво пакет PL/SQL

  2. Полезни запитвания за изтичане на паролата/политика/Настройки на oracle EBS

  3. java.lang.UnsatisfiedLinkError:няма ocijdbc11 в java. библиотека.път

  4. Как да създадете потребител в Oracle и да зададете привилегии

  5. Код за извикване на функция в пакет от C# и ODP.NET