|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 9 ![]() |
Bonsoir à tous, alors voilà je vous explique mon souci.
Je voudrais créer une fonction récursive en PL/SQL qui me permettrais de récupérer l'identifiant parent, pour un enregistrement donné, l'enregistrement parent, et fils se trouvant dans la même table. j'ai une table LISTEVALEUR qui se compose ainsi : ID_LISTEVAL (id auto increment) VAL (varchar, libellé de la valeur de liste) ID_VAL_PARENT (identifiant de la valeur de liste parente ex: 52,64 qui fait référence au ID_LISTEVAL parent) alors en fait ce que je voudrais faire, c'est créer une fonction qui boucle jusqu'a tomber sur la valeur parente de plus haut niveau. on sait qu'une valeur est parente, quand sont ID_VAL_PARENT vaut '0' l'algo de la fonction ressemblerait grosso à ça : je récupére l'enregistrement de niveau n+1 à mon enregistrement 12 SELECT ID_VAL_PAR FROM LISTEVALEUR WHERE ID_LISTVAL='12' BOUCLE je refais un SELECT sur l'enregistrement n+1 pour trouver son propre ID_VAL_PAR FIN BOUCLE quand l'enregistrement sur lequel je me trouve a un ID_VAL_PAR valant 0 les listes de valeurs on cette tête là : ---LISTE PARENTE de 1er niveau--- 1;MOYEN DE TRANSPORT;0 x;HABITATION;0 y;PAYS;0 ---SOUS LISTE de 2éme niveau--- 2;TERRESTRE;1 3;AERIEN;1 4;AQUATIQUE;1 ---SOUS LISTE de 3éme niveau--- 5;VOITURE;2 6;TRAIN;2 7;VELO;2 ---SOUS LISTE de 4éme niveau--- 8;DIESEL;5 9;ESSENCE;5 10;GPL;5 ---SOUS LISTE de 5éme niveau--- 11;SP95;9 12;SP98;9 en fait, à partir de l'enregistrement 12 (SP98), j'aimerais retrouver l'enregistrement parent 1 (MOYEN DE TRANSPORT), ne sachant pas trop comment faire en PL SQL, je vous demande un peu d'aide, pour savoir quelle est la meilleure façon de le faire, fonction ? curseurs ? merci pour votre aide |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Pas besoin de PL/SQL, CONNECT BY PRIOR est fait pour ça
|
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : mai 2008 Messages : 9 ![]() |
Salut et merci pour ton aide
ta solution a bien marché !!! ![]() pour ceux qui rencontreraient le même probléme, voilà comment j'ai fait : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com