Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để trả về một RefCursor từ hàm Oracle?

Tôi nghĩ rằng bạn đang thiếu sqlCom.ExecuteNonQuery ();

ngoài ra, thay vì chạy select func_test (7) từ kép; hãy chuyển nó để chạy chức năng và chuyển vào tham số

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

điều này dựa trên ODP mẫu có thể tìm thấy @% ora_home% \ Client_1 \ ODP.NET \ samples \ RefCursor \ Sample5.csproj

Nếu bạn muốn tránh (tốt hơn hoặc tệ nhất!) Bộ sưu tập tham số được xây dựng tùy chỉnh cho mỗi lệnh gọi proc / hàm mà bạn có thể giải quyết vấn đề đó bằng cách sử dụng các khối ẩn danh trong mã của bạn, tôi đã khuyên (một lần nữa chưa được kiểm tra!) Đoạn mã trên để phản ánh Đây là một blog tuyệt vời (của không ai khác ngoài Mark Williams) hiển thị kỹ thuật này. 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. Sự tự mãn dẫn đến:Rủi ro trở thành hiện thực

  2. Chạy Tổng số theo Nhóm SQL (Oracle)

  3. chọn N hàng trên cùng từ một bảng

  4. Số liệu thống kê động thích ứng giết chết hiệu suất trong 12.1.0.2 RAC

  5. Khôi phục tệp trình soạn thảo SQL (Truy vấn, thủ tục) Sau khi bắt cóc đối với sự cố hoặc treo Oracle