Depuis Progress 4GL (en fait ABL depuis quelques années) est un langage complet de turing complet que vous pouvez. Cependant peut-être pas dans une seule requête ...
Cet exemple récursif le fait, vous pourriez le faire de plusieurs façons différentes. Vous pouvez commencer par ce code, mais vous pourriez avoir besoin d'avoir plus de contrôles d'erreur etc.
DEFINE TEMP-TABLE ttPerson NO-UNDO
FIELD PersonName AS CHARACTER FORMAT "x(20)"
FIELD PersonParent AS CHARACTER.
/* A procedure for loading example data */
PROCEDURE createPerson:
DEFINE INPUT PARAMETER pcName AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcParent AS CHARACTER NO-UNDO.
CREATE ttPerson.
ASSIGN
ttPerson.personName = pcName
ttPerson.personParent = pcParent.
END.
/* Load some data */
RUN createPerson("Elizabeth II", "").
RUN createPerson("Charles", "Elizabeth II").
RUN createPerson("Andrew", "Elizabeth II").
RUN createPerson("Edward", "Elizabeth II").
RUN createPerson("Harry", "Charles").
RUN createPerson("William", "Charles").
RUN createPerson("James", "Edward").
RUN createPerson("George", "William").
/* Define a frame where the result will be displayed */
DEFINE FRAME f1 ttPerson.personName WITH 20 DOWN.
/* The recursive prodecure */
/* pcPerson - the person where to start track heritage (or perhaps it should have been lineage?*/
/* piDepth, just to format the output */
PROCEDURE trackHeritage:
DEFINE INPUT PARAMETER pcPerson AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER piDepth AS INTEGER NO-UNDO.
piDepth = piDepth + 1.
/* Find the tracked person */
FIND FIRST ttPerson NO-LOCK WHERE ttPerson.personName = pcPerson NO-ERROR.
IF AVAILABLE ttperson THEN DO:
DISPLAY FILL(" ", piDepth) + "|_" + ttPerson.personName @ ttPerson.personName WITH FRAME f1.
DOWN 1 WITH FRAME f1.
/* Track all available children to the person */
FOR EACH ttPerson NO-LOCK WHERE ttPerson.personParent = pcPerson:
RUN trackHeritage(ttPerson.personName, piDepth).
END.
END.
END.
/* Start tracking */
RUN trackHeritage("Elizabeth II", 0).
MESSAGE "Done" VIEW-AS ALERT-BOX.
s'il vous plaît ajouter les étapes que vous avez déjà essayé – atk