AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Select für Projekte mit Unterprojekten
Thema durchsuchen
Ansicht
Themen-Optionen

Select für Projekte mit Unterprojekten

Ein Thema von bcvs · begonnen am 13. Sep 2019 · letzter Beitrag vom 16. Sep 2019
 
bcvs

Registriert seit: 16. Jun 2011
733 Beiträge
 
Delphi 12 Athens
 
#1

Select für Projekte mit Unterprojekten

  Alt 13. Sep 2019, 11:51
Datenbank: ElevateDB • Version: 2.31 • Zugriff über: direkt
Hallo SQL-Spezialisten,

ich habe eine Datenbanktabelle für eine hierarchische Struktur von Projekten. In der Tabelle gibt es ein Feld für die eigene Projektnummer (PROJ_NR) und ein Feld für die Nummer des übergeordneten Projektes (VORG).

Die Nummern können beliebig sein, d.h. anhand der Projektnummer lässt sich die Zugehörigkeit zu einem bestimmten Projektzweig nicht feststellen.

Jetzt brauche ich ein Select, das mir alle Projekte in einem Nummernbereich der oberen Ebene einschließlich aller Unterprojekte liefert.

Beispiel:
Code:
1000
  - aaaa
      - 12345
      - 67890
  - bbbb
  - cccc
2000
  - xxxx
  - yyyy
      - bla
      - blub
  - zzzz
Ein Select von 1000 bis 2000 soll jetzt alle diese Projekte liefern. Ich habe das momentan mit Hilfe einer serverseitigen Funktion gelöst, die zu einer Projektnummer die Nummer des Hauptprojekts auf der oberen Ebene zurückgibt:

Code:
CREATE FUNCTION "MainVorg" (IN "aPrjNr" VARCHAR COLLATE "ANSI")
RETURNS VARCHAR COLLATE "ANSI"
BEGIN
  DECLARE Vorg Varchar;
  DECLARE MainPrjNr VarChar;
  DECLARE ProjCursor CURSOR FOR stmtProj;
  PREPARE stmtProj FROM 'Select Vorg From Projekte Where PROJ_NR = ?';

  Set Vorg = aPrjNr;
  Repeat
    Set MainPrjNr = Vorg;
    OPEN ProjCursor USING MainPrjNr;
    IF (ROWCOUNT(ProjCursor) > 0) THEN
       FETCH FIRST FROM ProjCursor ('Vorg') INTO Vorg;
    ELSE
       Set Vorg = '';
    END IF;
    CLOSE ProjCursor;

  Until (Vorg='') or (Vorg is NULL) End Repeat;
  Return MainPrjNr;
END
Diese Funktion wird dann beispielsweise folgendermaßen verwendet:

Code:
SELECT Projekte.PROJ_NR
FROM Projekte
WHERE (MainVorg(Projekte.PROJ_NR) >= '1000') and (MainVorg(Projekte.PROJ_NR) <= '2000')
Das funktioniert auch, ist allerdings bei größeren Datenmengen etwas langsam. Habt ihr irgendwelche Ideen, wie man das optimieren könnte?
  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 18:40 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