Bonjour
J'ai un souci avec la génération du chemin de l'arbre (cf. path dans la doc postgres).
Ensuite la requête basique fonctionne :
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 CREATE TABLE domaine ( id CHAR(25) NOT NULL, nom CHAR(35) NULL, parent CHAR(25) NULL, PRIMARY KEY(id), FOREIGN KEY(parent)REFERENCES Domaine(id) ON DELETE CASCADE ON UPDATE CASCADE ); insert into domaine values ('1', 'pA', null); insert into domaine values ('2', 'pB', '2'); insert into domaine values ('11', 'eA1', '1'); insert into domaine values ('12', 'eA2', '1'); insert into domaine values ('13', 'eA3', '1'); insert into domaine values ('21', 'eB1', '2'); insert into domaine values ('22', 'eB2', '2'); insert into domaine values ('23', 'eB3', '2'); insert into domaine values ('11-1', 'eeA1', '11'); insert into domaine values ('11-2', 'eeA1', '11');
le résultat est dans la PJ resRecOK.png.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 WITH recursive enfant(idEnfant,nomEnfant,level) AS ( SELECT d.id,d.nom,1 FROM domaine d WHERE d.id='1' union all SELECT d.id,d.nom,(e.level+1) FROM domaine d,enfant e WHERE d.parent=e.idEnfant ) SELECT * FROM enfant ORDER BY level;
par contre je n'arrive pas à faire fonctionner la requête inspirée de la doc PostgreSql, et intégrant la génération du chemin :
L'erreur est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 WITH recursive enfant(idEnfant,nomEnfant,level, path, cycle) AS ( SELECT d.id,d.nom,1 , ARRAY[d.id ], false FROM domaine d WHERE d.id='1' union all SELECT d.id,d.nom,(e.level+1), path ||d.id , d.id=ANY(path) FROM domaine d, enfant e WHERE d.parent=e.idEnfant ) SELECT * FROM enfant ORDER BY level;
cf. la PJ : resRecKO.pngERROR: recursive query "enfant" column 4 has type character(25)[] in non-recursive term but type bpchar[] overall
LINE 3: SELECT d.id,d.nom,1 , ARRAY[d.id ], false
^
HINT: Cast the output of the non-recursive term to the correct type.
Je dois mal utiliser le type ARRAY, pouvez-vous m'éclairer ?
Partager