Bonjour à tous,
Je dispose d’une structure hiérarchique, ce qu’on appelle vulgairement un arbre, modélisé par une table dont chaque enregistrement possède un champ « père » qui est une référence à l’id du noeud père dans l’arbre (la racine de l’arbre à ce champ à NULL).
Je me suis cassé la tête pour écrire une fonction en pl/pgsql qui retourne toutes les feuilles correspondant à un noeud donné (en entrée : un id, en sortie : un set of records). Ma méthode a consisté à écrire une fonction principale « enfants » qui crée une table auxiliaire puis qui appelle une fonction « enfants_aux » qui s’occupe de la récursivité proprement dite (et qui fait des INSERT dans la table créée précédemment). Après avoir retourné tous les éléments de la table auxiliaire, la fonction principale détuit la table auxiliaire.
En plus d’être lourde, cette méthode est aussi insatisfaisante parce que je suis obligé de recharger ma fonction avant chaque appel (je travaille avec pgAdmin III), sinon j’ai une réponse cryptique du genre :
Savez-vous pourquoi je récupère ce message ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERROR: relation with OID 18610 does not exist CONTEXT: PL/pgSQL function "enfants" line 7 at for over select rows
Y a t-il mieux pour gérer la récursivité ?
Merci à tous pour vos suggestions
Sakalam
Partager