Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwrócić RefCursor z funkcji Oracle?

Myślę, że brakuje Ci sqlCom.ExecuteNonQuery();

także, zamiast uruchamiać wybierz func_test(7) z dual; przełączmy go, aby uruchomić funkcję i przekazać parametr

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

jest to oparte na przykładowym ODP, który można znaleźć @ %ora_home%\Client_1\ODP.NET\samples\RefCursor\Sample5.csproj

Jeśli chcesz uniknąć (na lepsze lub gorsze!) niestandardowej kolekcji parametrów dla każdego wywołania procedury/funkcji, którą możesz obejść, wykorzystując anonimowe bloki w swoim kodzie, poprawiłem (po raz kolejny nie przetestowałem!) powyższy kod, aby odzwierciedlić ta technika.Oto fajny blog (od nikogo innego jak Mark Williams) przedstawiający tę technikę.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. Rekurencyjne zapytanie SQL w tabeli samoodwołującej się (Oracle)

  2. Jak wybrać z kolumny typu obiektu w Oracle 11g?

  3. ROWIDTONCHAR() Funkcja w Oracle

  4. JDBC zwraca pusty zestaw wyników

  5. Usuń nagłówek kolumny do wyjściowego pliku tekstowego