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
et je voudrais obtenirmatricule | MemberOf ------------------------------- 0000001 | toto, tata, titi 0000002 | toto 0000003 | titi, 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"matricule | MemberOf ------------------------------- 0000001 | toto 0000001 | tata 0000001 | titi 0000002 | toto 0000003 | titi 0000003 | tota
et que je comprend pas tres bien d'ou peut venir ce défaut...
merci de votre aide.
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
Edit : version d'oracle : inconnue (ce n'est pas moi qui gere cela mais je dirais 10g ou 11g...)
Partager