sql >> Database >  >> RDS >> Oracle

Hoe een RefCursor van de Oracle-functie te retourneren?

Ik denk dat je de sqlCom.ExecuteNonQuery(); . mist

ook, in plaats van het uitvoeren van de select func_test(7) van dual; laten we het omschakelen om de functie uit te voeren en de parameter door te geven

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

dit is gebaseerd op het voorbeeld-ODP dat kan worden gevonden @ %ora_home%\Client_1\ODP.NET\samples\RefCursor\Sample5.csproj

Als je de op maat gemaakte paramverzameling voor elke proc / functie-aanroep wilt vermijden (voor beter of slechtste!) kun je dat omzeilen door anonieme blokken in je code te gebruiken. Ik heb de bovenstaande code gewijzigd (wederom niet getest!) deze techniek.Hier is een mooie blog (van niemand minder dan Mark Williams) die deze techniek laat zien.http://oradim.blogspot.com/2007/04/odpnet-tip-anonymous-plsql-and.html




  1. De ACID-eigenschappen van afschriften en transacties

  2. Op rollen gebaseerd toegangscontrole maken in MongoDB

  3. MySQL Split-Brain elimineren in multi-clouddatabases

  4. BESTELLEN OP Alias ​​werkt niet