Bonjour a tous

depuis la version 2.1, firebird, il est possible d'utiliser les CTE, notamment pour faire des requetes recursives.


j'essaye, mes j'eprouve qq difficultes. par exemples je n'arrive pas a faire apparaitre les resultats !
le mot-cle SUSPEND

Alors comment fait t'on pour faire apparaitre les resultats ?

voici ma table test et procedure test

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CREATE TABLE A_TEST (
    ID_PERE    INTEGER,
    ID_ENFANT  INTEGER NOT NULL
);
les donnees

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (NULL, 1);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (1, 2);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (2, 3);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (1, 4);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (2, 5);
et voici la procedure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE PROCEDURE AAAA_TEST (
    Enfant INTEGER)
RETURNS (
    Id_enfant INTEGER,
    Id_pere INTEGER)
AS
begin
 
  with recursive test (t_Fils, T_Pere)
  as
       (SELECT
            A_test.Id_enfant,
            A_test.Id_pere
        FROM
            A_test
       where A_test.Id_pere IS Null
        UNION ALL
        SELECT Bis.Id_enfant,
            Bis.Id_pere
        FROM
            A_test BIS
                INNER JOIN Test Ter ON (Ter.T_Pere = Bis.Id_enfant)
 )
 
 Select t_Fils, t_Pere from test
 where test.t_Fils = :enfant
  INTO
     :Id_enfant ,
     :Id_pere
       ;
 
 
end
Et je suis sur que la reponse doit etre triaviale

a+

olivier