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
les donnees
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 );
et voici la procedure
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 je suis sur que la reponse doit etre triaviale
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
a+
olivier
Partager