Einzelnen Beitrag anzeigen

Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#8

Re: Oracle + Firebird + Rekursion

  Alt 3. Feb 2005, 15:10
Moin,

hier mal 'n kleiner Vorschlag :
SQL-Code:
CREATE PROCEDURE HIERARCHIE (
    C_ID INTEGER,
    C_LEVEL INTEGER)
RETURNS (
    O_CHEF_ID INTEGER,
    O_EMP_ID INTEGER,
    O_EMP_NAME VARCHAR (50),
    O_LEVEL INTEGER)
AS
BEGIN

     if (c_level is null) then
        c_level = 0;

     FOR
        SELECT emp_ID, chef_ID, emp_name
        FROM employee
        WHERE (chef_ID = :C_ID) OR (chef_ID IS NULL AND :C_ID IS NULL)
        INTO :O_EMP_ID, :O_CHEF_ID, :O_EMP_NAME
      DO
      BEGIN
           o_level = c_level;
           SUSPEND;

           FOR
              SELECT o_emp_ID, o_chef_ID, o_emp_name, o_level FROM HIERARCHIE(:O_EMP_ID,:c_level+1)
              INTO :O_EMP_ID, :O_CHEF_ID, :O_EMP_NAME, :o_level
          DO
          BEGIN
               SUSPEND;
          END
      END
END
Wie es scheint, bekommt man bei EXECUTE PROCEDURE ... RETURNING VALUES immer nur das letzte Resultat zurück; die "Zwischenergebnisse" gehen leider flöten.

Ach ja, aufrufen kannst Du das Ganze mit
select * from HIERARCHIE(x,y) wobei :
X = chef_id (oder null für die gesamte Hierarchie)
Y = start_level (= gewünschte zahl für den höchsten Level)


Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat