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:
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
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
PERE_ID   FILS_ID
A1           A11
A1           A12
A1           A13
A2           A21
A2           A22
A11         A111
A11         A112
A12         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.


Pour la première table, j'ai testé quelque chose comme ça:
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
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).

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!