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]