Salutation,

je crée actuellement un script qui doit la permettre de remplir une table a partir des données d'une autre table.

Dans la premiere table, j'ai

matricule | MemberOf
-------------------------------
0000001   | toto, tata, titi
0000002   | toto
0000003   | titi, tota
et je voudrais obtenir
matricule | MemberOf
-------------------------------
0000001   | toto
0000001   | tata
0000001   | titi
0000002   | toto
0000003   | titi
0000003   | tota
après mettre renseigné on m'a conseillé une boucle récursive qui découpe ma chaine Memberof en fonction des virgules... le problème est que lors de l'execution de ma requete je tombe sur cette erreur "ORA-32044: cycle détecté lors de l'exécution de la requête WITH récursive"

et que je comprend pas tres bien d'ou peut venir ce défaut...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WITH Recup (matricule, Unmemberof, LesAutresYga) AS
(
   SELECT 
	MATRICULE, 
	CASE 
		WHEN INSTR(',', MEMBEROF)>0 THEN 
			LTRIM(SUBSTR(MEMBEROF,1, INSTR(',', MEMBEROF) -1))
		ELSE 
			MEMBEROF
	END AS UNMEMBEROF,
	LTRIM(SUBSTR(MEMBEROF, INSTR(',', MEMBEROF) +1, LENGTH(MEMBEROF) - INSTR(',', MEMBEROF))) AS LESAUTRESYGA
 
   FROM COMPTES_AD
 
  UNION ALL
 
   SELECT 
	COMPTES_AD.MATRICULE, 
	CASE 
		WHEN INSTR(',' , Recup.LesAutresYga)>0 THEN 
			LTRIM(SUBSTR(Recup.LesAutresYga,1, INSTR(',',Recup.LesAutresYga) -1))
		ELSE 
			Recup.LesAutresYga
	END,
	CASE 
		WHEN INSTR(',' , Recup.LesAutresYga)>0 THEN
			 LTRIM(SUBSTR(Recup.LesAutresYga, INSTR(',', Recup.LesAutresYga) +1, LENGTH(Recup.LesAutresYga) - INSTR(',',Recup.LesAutresYga)))
		ELSE
			 NULL
	END
   FROM COMPTES_AD 
	INNER JOIN Recup ON Recup.Matricule = COMPTES_AD.Matricule 
   WHERE 
	LesAutresYga IS NOT NULL
)
SELECT DISTINCT *
FROM RECUP
merci de votre aide.

Edit : version d'oracle : inconnue (ce n'est pas moi qui gere cela mais je dirais 10g ou 11g...)