AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Auf PL/SQL Variablen zugreifen (Oracle)
Thema durchsuchen
Ansicht
Themen-Optionen

Auf PL/SQL Variablen zugreifen (Oracle)

Ein Thema von ak1 · begonnen am 3. Jan 2005 · letzter Beitrag vom 4. Jan 2005
Antwort Antwort
ak1

Registriert seit: 12. Okt 2003
243 Beiträge
 
#1

Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 3. Jan 2005, 20:22
Hallo Leute,

ich habe in Oracle 10g folgende einfache PL/SQL-Prozedur (anonymer Block):

Code:
set serveroutput on;

--diese einfache pl/sql-procedure zeigt alle Dozenten an
declare
v_Vorname scott.dozent.d_Vorname%Type; --Datentyp aus der Datenbank übernehmen
v_Nachname varchar2(20); --Datentyp selbst deklariert

Cursor c_Dozenten is
select d_Vorname, D_Nachname from scott.dozent;

begin
  open c_Dozenten;
 
  loop
    fetch c_Dozenten into v_Vorname, v_Nachname;
    exit when c_dozenten%NOTFound;
    dbms_Output.put_line('Vorname: '||v_Vorname||' -  Nachname: '||v_Nachname);
  end loop;

end;
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.
Vielleicht könnt Ihr mir auch einen guten Link empfehlen in dem beschrieben ist wie ich PL/SQL in Delphi(ADO) handhabe.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 07:12
Wenn Du schon ADO verwenden willst: Hast Du wenigstens einen ADO-Treiber von Orlace besorgt (Der von M$ defaultmäßig installierte ist Schrott, wenn man etwas mehr machen will as ein Testprogramm). Ich würde dir aber empfehlen native-Komponenten wie von Core Lab zu verwenden. Sind direkt auf Oracle zugeschnitten und erfordern keine zusätzliche Installation eine Oracle-ADO-Treibers.

Wenn Du bei ADO bleibst und deine Stored Procedure richtig definiert hast, so sollte die ADOExpress-Komponente TADOStoredProc das gewünschte liefern. Auf Form ziehen, mit ADOConnection verbinden, Stored-Procedure auswählen und Ergebnis abholen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ak1

Registriert seit: 12. Okt 2003
243 Beiträge
 
#3

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 09:10
Hallo Bernhard,

ich habe derzeit noch den MS OLEDB für Oracle. Der andere OLEDB Provider für Oracle den ich auch in meiner Liste habe lies sich zwar beim konfigurieren der ADOConnection erfolgreich testen aber bei "Adoconnection.open" erscheint immer eine Fehlermeldung (ich kann diese Meldung mal heute abend posten, sie war aber nicht wirklich aussagekräftig). Ich denke mal, dass dies der Treiber von Oracle ist, da ich auch eine Oracle 10g DB und diverse Oracle-Tools auf meinem Rechner habe. Dieser Treiber wird glaube ich mitinstalliert

Was mir aber wirklich wichtig ist:
Kannst du mir bitte mal ein Beispiel nennen wie ich so eine ADO-StoredProcedure richtig definiere?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 11:10
Zitat von ak1:
ich habe derzeit noch den MS OLEDB für Oracle. Der andere OLEDB Provider für Oracle den ich auch in meiner Liste habe lies sich zwar beim konfigurieren der ADOConnection erfolgreich testen aber bei "Adoconnection.open" erscheint immer eine Fehlermeldung (ich kann diese Meldung mal heute abend posten, sie war aber nicht wirklich aussagekräftig). Ich denke mal, dass dies der Treiber von Oracle ist, da ich auch eine Oracle 10g DB und diverse Oracle-Tools auf meinem Rechner habe. Dieser Treiber wird glaube ich mitinstalliert
Um diesen Problemen aus dem Weg zu gehen nehme ich immer native Treiber (auch wenn sie ein paar € kosten).

Zitat von ak1:
Kannst du mir bitte mal ein Beispiel nennen wie ich so eine ADO-StoredProcedure richtig definiere?
Leider nein. Selbst verwende ich keine SP's bzw. hatte das letzte mal vor ein paar Jahren mit MS SQL mit SP's zu tun. Falls hier kein weiterer User ein Beispiel hat, so würde ich mal googeln.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
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
ak1

Registriert seit: 12. Okt 2003
243 Beiträge
 
#6

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 11:54
Danke für Eure Antworten, ich schaue mir das heute abend mal an.


P.S. da lobe ich mir doch JDBC
  Mit Zitat antworten Zitat
ak1

Registriert seit: 12. Okt 2003
243 Beiträge
 
#7

Re: Auf PL/SQL Variablen zugreifen (Oracle)

  Alt 4. Jan 2005, 21:44
Für alle die es interessiert, hier mal "die Lösung":

Ich habe eine einfache PL/SQL-Funtion, welche mir die Datensatzanzahl einer Tabelle ermittelt.
Dieser Funktion übergebe ich den Tabellennamen und erhalte als Rückgabewert die Datensatzanzahl.
Diese funktion ist bereits in der Oracle-DB gespeichert:

Code:
create or replace function scott.Anzahl_Datensatze(v_ergebnis out number, v_Tabelle scott.dozent.d_Vorname%Type) return number
is
  v_return number;
  v_SQL varchar(300);

begin

  v_SQL:='select count(*) from '|| v_Tabelle;

  execute immediate v_SQL
  into v_return;

  return v_return;

end;
Nun habe ich die Komponente "stored1: TADOStoredProc" welche ich mit der Adoconnection im OI verbinde.
Ich gebe im OI den Namen der Funktion an (Anzahl_Datensatze), wobei ich mir das "scott" sparen kann da ich sowieso als Scott angemeldet bin.
Wenn ich nun im OI "Parameters" anklicke, dann erscheint ein Fenster in dem alle Parameter dieser Funktion drinstehen (wird von Delphi eingelesen und angezeigt.)

Nun führe ich folgenden kurzen kommentierten Quelltext aus:

Code:
  //dem Parameter v_Tabelle einen Tabellennamen übergeben
  stored1.Parameters.ParamByName('v_Tabelle').Value:='DOZENT';
  //PL/SQL-Funktion ausführen
  stored1.ExecProc();

  //Das Ergebnis der Funktion anzeigen (Anzahl der Datensätze)
  showmessage(stored1.Parameters.ParamByName('RETURN_VALUE').Value);
Es erscheint ein Fenster mit der korrekten Datensatzanzahl.
Ich muss mal wieder eingestehen, dass Delphi seinen Ruf als RAD-Tool zurecht hat.

Gruß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz