@trifid
Ich verwende generell serverseitige unidirektionale Cursor WANN IMMER ES GEHT!
Weißt du auch warum? Es ist so ziemlich die schnellste Art Daten von einem
DB-Server abzufragen.
Die Zwischenschicht eines Client cursors klaut dir mindestens die Hälfte des möglichen Datendurchsatzes.
Zitat von
trfid:
a) ab .net wird diese Art von Cursor nicht mehr unterstützt
Das ist absolut falsch! Ich benutze auch unter .Net REF Cursor (eine Referenz auf einen Cursor, der auf dem Server geöffnet wurde).
Eine Suche nach "REF CUrsor" in der
SDK Doku ergibt (Ranking 3):
Zitat von
.Net SDK Doku:
The following C# example assumes that you have created this stored procedure.
SQL-Code:
create or replace
package sp_pkg
as
type refCursorxx
is ref
cursor;
procedure getdata(a1 out refCursorxx, a2 out refCursorxx);
end;
create or replace
package body sp_pkg
as
procedure getdata(a1
in number, a2 out refCursorxx)
is
begin
open a1
for select *
from emp;
open a2
for select *
from dept;
end getdata;
end;
The following C# example demonstrates how you might obtain table and column information using the stored procedure.
[C#]
Delphi-Quellcode:
OracleConnection conn = new OracleConnection("Data Source=Oracle8i;Integrated Security=yes");
Conn.Open;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "sp_pkg.getdata";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("a1", OracleType.Cursor)).Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OracleParameter("a2", OracleType.Cursor)).Direction = ParameterDirection.Output;
DataSet ds = new DataSet();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
adapter.Fill(ds);