Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 11:37
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.
  Mit Zitat antworten Zitat