Zitat von
ak1:
Wie kann ich nun auf dem Client die Werte aus v_Vorname und v_Nachname verarbeiten?
Ich verwende Delphi 6 Professional und die
Ado-Komponenten. Ich bin auf
Ado beschränkt.
Das beißt sich gegenseitig.
Mit
ADO kannst du keine komplexen Typen an deine Anwendung binden. Das geht nur über OCI. Nette Kapselungen dafpr sind DOA oder ORADAC (einfach mal hier danach suchen
)
Damit würdest du einen Typen erzeugen:
SQL-Code:
create or replace type TDozent as object
(
Vorname Scott.Dozent.d_Vorname%Type,
Nachname varchar2(20)
)
Und eine passende Collection:
create or replace type TDozenten as table of TDozent
Copy & Paste von deinem Block mit ein paar Änderungen:
SQL-Code:
create or replace function getDozenten return TDozenten is
Dozenten TDozenten;
Cursor cur$Dozenten is
SELECT TDozent(d_Vorname
,D_Nachname)
FROM Scott.Dozent;
begin
open cur$Dozenten;
fetch cur$Dozenten bulk collect
into Dozenten;
close cur$Dozenten;
if Dozenten.Count > 0 then
for i in Dozenten.First .. Dozenten.Last loop
dbms_Output.put_line('Vorname: '||Dozenten(i).Vorname||
' - Nachname: '||Dozenten(i).Nachname);
end loop;
return Dozenten;
else
return null;
end if;
end;
Aber nur per OCI könntest du die Collection an deinen Client binden.
Delphi-Quellcode:
var
Dozenten :TOracleObject;
begin
Dozenten := TOracleObject.Create('
SCOTT.TDOZENTEN', '
', '
');
with SomeQuery
do
begin
SQL.Text := '
begin'+#10+
'
:oDozenten := getDozenten();'+#10+
'
end;';
Execute();
GetComplexVariable('
oDozenten', otObject, Dozenten);
end;
end;
BTW: Der
ADO Provider von MS ist scheußlich und sollte aufgrund von Menschenrechtsverletzungen verboten werden.
Der von Oracle kann fast genauso verwendet werden.
Alles ist nur aus den Fingern gesaugt mangels Delphi & Oracle. Also nagelt mich nicht darauf fest.