Résolution de l'erreur « Limite de profondeur de récursion dépassée » dans les requêtes récursives
Cet article traite d'une erreur de requête SQL courante : dépassement de la profondeur de récursion maximale. Le problème provient d'une expression de table commune (CTE) récursive, affectant spécifiquement le EmployeeTree
CTE dans l'exemple de requête.
Le EmployeeTree
CTE récupère de manière récursive les données des employés de la table tEmployees
, en créant une structure hiérarchique basée sur les valeurs correspondantes dans les colonnes APV_MGR_EMP_ID
et UPS_ACP_EMP_NR
. Cependant, des hiérarchies exceptionnellement profondes peuvent déclencher la limite de récursion (souvent fixée à 100), entraînant une erreur.
La solution : activer la récursivité illimitée
La solution réside dans l'ajustement de l'option maxrecursion
de la requête. Cette option contrôle la profondeur de récursion maximale. Le définir sur 0 permet une récursivité illimitée, contournant efficacement l'erreur :
<code class="language-sql">... from EmployeeTree option (maxrecursion 0)</code>
En ajoutant option (maxrecursion 0)
, le CTE récursif continuera le traitement jusqu'à ce que toutes les lignes correspondantes soient récupérées, évitant ainsi l'erreur « limite de profondeur de récursion dépassée ». Cette approche convient lorsque vous êtes sûr que la récursion finira par se terminer naturellement en raison de la structure des données. Cependant, la prudence est de mise ; Une récursivité illimitée dans des requêtes mal conçues pourrait entraîner des problèmes de performances, voire une instabilité du système. Testez minutieusement tout changement impliquant une récursivité infinie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!