Bonjour.
J'ai un souci pour effectuer une requête hiérarchique. J'ai bien essayé de reproduire l'exemple "classique" mais je n'ai pas tout à fait les mêmes tables.
Car je peux (et je veux) effectuer la requête de deux façons, à partir de deux tables différentes.
La première table est construite comme un arbre où les pères sont reliés à tous leurs descendants y compris à eux-mêmes, mais (là est la différence avec l'exemple classique) il n'y a pas de colonne vide. Exemple de données:
La seconde table est une table de lien direct père-fils, dans laquelle les pères ne sont pas liés à eux-mêmes et où il n'y a toujours pas de colonne vide. Exemple:
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 PERE_ID FILS_ID A1 A1 A1 A11 A1 A12 A1 A13 A1 A111 A1 A112 A1 A121 A2 A2 A2 A21 A2 A22 A11 A11 A11 A111 A11 A112 A12 A12 A12 A121 A13 A13 A111 A111 A112 A112 A121 A121
Je me trouve confronté soit à l'erreur "Boucle connect by dans les données utilisateur", soit à une requête sans fin. A noter que NOCYCLE et PARENT n'ont pas l'air d'être reconnus en 9i.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 PERE_ID FILS_ID A1 A11 A1 A12 A1 A13 A2 A21 A2 A22 A11 A111 A11 A112 A12 A121
Pour la première table, j'ai testé quelque chose comme ça:
J'ai précisé 'A1' pour tester unitairement, sachant que je peux (veux) partir d'un ensemble donné de pères (et donc remplacer 'A1' par ma_vue.pere_id, ma_vue étant dans la même requête).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT LPAD ('+', 2 * (LEVEL - 1), '+') || pere_id FROM table1 WHERE pere_id <> fils_id START WITH pere_id = 'A1' CONNECT BY PRIOR fils_id = pere_id
Pour la seconde table, je n'ai encore rien trouvé de concluant.
Bref, je sens que quelque chose m'échappe... Merci du coup de main!![]()
Partager