Bonjour à tous !  
 
Je suis actuellement en train de bosser sur un sujet SQL.  
 
Je dois remonter une hiérarchie contenue dans une seule et unique table.  
 
Voici un exemple qui fonctionne manuellement plus claire :  
 
J'ai une table ACT d'organisations:  
 
SELECT PARENT_KEY FROM ACT WHERE ACT_NAME='XXXXX';
 
On va dire que PARENT_KEY = 28
 
Je récupère donc la clé de l'organisation parente puis je récupère diverse données avec cette clée
 
SELECT ACT_KEY, PARENT_KEY, ORG_UDF_LEVEL FROM ACT WHERE ACT_KEY=28;
 
Si le niveau de hiérarchie vaut 2, ORG_UDF_LEVEL = 2, j'ai ce qu'il me faut.  
 
Sinon je relance la requête avec le nouveau parent key :  
 
SELECT ACT_KEY, PARENT_KEY, ORG_UDF_LEVEL FROM ACT WHERE ACT_KEY=46;
 
Jusqu'à ce que ORG_UDF_LEVEL = 2.  
 
Je cherche donc une requête qui me recherche automatiquement la valeur qui m'interesse.  
 
J'ai déjà fait ça :  
 
SELECT ACT.ACT_NAME, ACT.PARENT_KEY, ACT.ORG_UDF_LEVEL,  
ACT2.ORG_UDF_SHORT_NAME, ACT2.ORG_UDF_LEVEL, ACT3.ORG_UDF_SHORT_NAME, ACT3.ORG_UDF_LEVEL
FROM ACT  
LEFT JOIN ACT ACT2  ON ACT.PARENT_KEY=ACT2.ACT_KEY  
LEFT JOIN ACT ACT3  ON ACT2.PARENT_KEY=ACT3.ACT_KEY  
ect...
WHERE ACT.ACT_NAME='XXXXX';
 
Mais c'est clairement pas la solution. J'ai pas besoin des données intermédiaires.
 
Il y a ce script qui fonctionne :  
declare
v_level varchar2(2);
v_parent_key varchar2(7);
begin
v_level :=99;
v_parent_key :='4';
WHILE v_level > 2 LOOP
select
PARENT_KEY, ORG_UDF_LEVEL
into v_parent_key, v_level
from
ACT
where
ACT_KEY = v_parent_key;
IF v_level = 2 THEN
dbms_output.put_line('PARENT KEY :' || v_parent_key || ' LEVEL : '||v_level);
END IF;
END LOOP;
end;
 
Mais j'aimerai du SQL,  
 
Merci d'avance,
 
Jimmy