AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Oracle + Firebird + Rekursion
Thema durchsuchen
Ansicht
Themen-Optionen

Oracle + Firebird + Rekursion

Ein Thema von fatima · begonnen am 2. Feb 2005 · letzter Beitrag vom 4. Feb 2005
 
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Oracle + Firebird + Rekursion

  Alt 3. Feb 2005, 19:24
Hallo Fatima,
ja der Trick liegt im For Select in die Rekusrion zu gehen.

Du schriebst etwas von preorder Traversierung, dass ist nicht moeglich da dein
Baum ja keine Ordnung auf LevelEbene hat.

da die Bäume
Code:
    20
   |   |
   10  5

und
   20 
  |    |
  5    10

ja äquivalent sind.
Hier noch ein alternativer Vorschlag von mir zu der gesuchten Stored proc:
Code:
CREATE PROCEDURE TRAVERSIERE (
    ACHEF_ID INTEGER)
RETURNS (
    EMPID INTEGER)
AS
DECLARE VARIABLE NR INTEGER;
BEGIN
  EMPID = :ACHEF_ID;
  SUSPEND;
  FOR SELECT E.EMP_ID FROM EMPLOYEE E
  WHERE E.CHEF_ID =:ACHEF_ID
  ORDER BY E.EMP_ID DESC
  INTO :NR DO
  BEGIN
    EMPID = :NR;
    SUSPEND;
    FOR SELECT EMPID
        FROM TRAVERSIERE(:NR)
        WHERE EMPID <> :NR
        INTO :EMPID DO
      SUSPEND;
  END
END
Diese Proc liefert die Knoten hierarchisch:
Die Proc kannst du dann in einer Query nutzen und deine Spalten
individuell setzen.
etwa so:
Code:
SELECT P.EMPID , E.CHEF_ID, E.EMP_NAME ,
(SELECT EE.EMP_NAME FROM EMPLOYEE EE
  WHERE EE.EMP_ID = E.CHEF_ID) AS SEIN_DIREKTER_CHEF_IST
FROM TRAVERSIERE(20) P, EMPLOYEE E
WHERE P.EMPID = E.EMP_ID
Richtige gute Firebird Seiten kenne ich nicht! Lernt man wohl am besten wenn man sich
selbst damit auseinander setzt.
Im übrigen ist die SP Language von firebird ja nicht so mächtig wie bei Oracle,
die 20-30 Befehle die es bei Firebird gibt, beherrscht man schnell.

Noch ein Tip für deine Datenstruktur:
Sie sieht es leider nicht vor, dass ein Untergebener 2 direkte Vorgesetzte hat,
bspw. eine Sekräterin morgens in Abteilung A und nachmittags in Abteilung B.
Aber da wirst du sicherlich schon drauf gekommen sein.

mfg
DD

[edit=MrSpock]Doppelpost gelöscht. Mfg, MrSpock[/edit]
  Mit Zitat antworten Zitat
 


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 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz