Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengembalikan RefCursor dari fungsi Oracle?

Saya pikir Anda melewatkan sqlCom.ExecuteNonQuery();

juga, alih-alih menjalankan pilih func_test(7) dari dual; mari kita alihkan untuk menjalankan fungsi dan meneruskan 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();}

ini berdasarkan contoh ODP yang dapat ditemukan @ %ora_home%\Client_1\ODP.NET\samples\RefCursor\Sample5.csproj

Jika Anda ingin menghindari (baik atau buruk!) kumpulan param yang dibuat khusus untuk setiap panggilan proc/fungsi, Anda dapat menyiasatinya dengan memanfaatkan blok anonim dalam kode Anda, saya telah mengubah (sekali lagi belum diuji!) kode di atas untuk mencerminkan teknik ini. Berikut adalah blog yang bagus (tidak lain dari Mark Williams) yang menunjukkan teknik ini. 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. Mengekstrak jumlah total detik dari tipe data interval

  2. MySQL 'buat skema' dan 'buat database' - Apakah ada perbedaan?

  3. Menginstal RAC untuk Database dengan Datafiles

  4. Cara Membuat Prosedur Tersimpan PL/SQL Dengan Parameter Di Database Oracle

  5. Lampiran di Aplikasi Oracle R12