Bonjour,

J'ai une table qui représente les liens entre les différents type de structures pouvant composer un établissement.

La table est : annuaire.arbre_structure(structure_str_id, structure_str_id_child)

je souhaiterais créer une fonction qui à partir de l'id d'une structure me donne toutes les types de sous structures possibles. Problème les cycles sont tout à fait possible.

Je suppose que la vérité est dans la récursion mais j'avoue ne pas trop savoir comment arrêter celle ci.

J'ai essayer ceci qui boucle infiniment si je ne met pas une condition d'arrêt sur la profondeur :

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
 
WITH RECURSIVE children(structure_str_id, structure_str_id_child, depth) AS (
 
	SELECT
		arbre.structure_str_id,
		arbre.structure_str_id_child
		, 1
	FROM annuaire.arbre_structure AS arbre
	WHERE arbre.structure_str_id = 1 -- change this to the root id
 
	UNION ALL
 
	SELECT distinct
		arbre.structure_str_id,
		arbre.structure_str_id_child
		, children.depth + 1
	FROM  annuaire.arbre_structure AS arbre 
        JOIN children ON arbre.structure_str_id = children.structure_str_id_child 
        WHERE depth < 10
 
)
SELECT * FROM children;
Précision au cas où je suis sous 9.4.

Merci d'avance !