sql >> Database teknologi >  >> RDS >> Oracle

Hvordan returnerer man en RefCursor fra Oracle-funktion?

Jeg tror, ​​du mangler sqlCom.ExecuteNonQuery();

også i stedet for at køre select func_test(7) fra dual; lad os skifte det til at køre funktionen og videregive 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();}

dette er baseret på eksemplet ODP, der kan findes @ %ora_home%\Client_1\ODP.NET\samples\RefCursor\Sample5.csproj

Hvis du vil undgå (på godt og værst!) den specialbyggede param-samling for hvert proc/funktionskald, du kan komme uden om ved at bruge anonyme blokke i din kode, har jeg ændret (igen uafprøvet!) koden ovenfor for at afspejle denne teknik.Her er en fin blog (fra ingen ringere end Mark Williams), der viser denne teknik.http://oradim.blogspot.com/2007/04/odpnet-tip-anonymous-plsql-and.html




  1. Sådan aktiveres alle CHECK &fremmednøglebegrænsninger i en database i SQL Server (T-SQL-eksempler)

  2. Fejlkode:2013. Mistet forbindelse til MySQL-server under forespørgsel

  3. Migrering fra Oracle-database til MariaDB - hvad du bør vide

  4. Bedste fremgangsmåder for SQL varchar kolonnelængde