Leçon 2 / 9 — Chapitre 7: CTE récursive et structures avancées
Condition d'arrêt : éviter une boucle infinie
Une CTE récursive s'arrête naturellement quand son terme récursif ne trouve plus aucune ligne correspondante — c'est-à-dire quand plus aucune catégorie n'a pour parent une ligne ajoutée au tour précédent.
Sur categories, la récursion de la leçon précédente s'arrête après 2 tours : le premier ajoute les enfants directs des racines (2, 4, 6), le second ajoute l'enfant de ces enfants (3, seul descendant de 2) ; au troisième tour, aucune catégorie n'a pour parent 3, 4 ou 6 — la récursion s'arrête d'elle-même.
Le vrai danger : un cycle dans les données. Si une catégorie avait pour parent_id l'un de ses propres descendants (par erreur, ou par corruption des données), le terme récursif retrouverait indéfiniment de « nouvelles » lignes déjà vues — une boucle infinie, qui ne s'arrêterait jamais d'elle-même.
À retenir :
- Une CTE récursive s'arrête d'elle-même dès que son terme récursif ne trouve plus aucune ligne correspondante.
- Un cycle dans les données (une catégorie descendante d'elle-même) provoque une boucle infinie, sans arrêt naturel possible.
- Une protection courante consiste à limiter le nombre de tours (
WHERE niveau < 20, par exemple) ou à suivre les identifiants déjà visités pour détecter un cycle.
À vous de jouer : si categories contenait une ligne dont le parent_id pointerait vers l'un de ses propres enfants, la requête de la leçon précédente s'arrêterait-elle naturellement ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès