une requete qui me dépasse avec une fonction de concaténation à l'intérieur
3 tables T1 T2 T3,t outes liées par le champ ID
T1 et T3 les enregistrements de valeur ID sont uniques
T2 les enregistrements de valeur ID peuvent être multiple
une vue V_T1T2T3:
une focntion concatenate_list :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select T1_3.ins,T1_T3.id,T3.idp,T1_3.zone from (select T1.id id,T1.ins inS,concatenate_list(CURSOR(SELECT LIBELLE FROM T2 WHERE T1.id = T2.id)) zone from T1) T1_3 left join T3 on T1_3.id = T3.id
qui fonctionne trés bien...
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 (p_cursor IN SYS_REFCURSOR) RETURN VARCHAR2 IS l_return VARCHAR2(32767); l_temp VARCHAR2(32767); BEGIN LOOP FETCH p_cursor INTO l_temp; EXIT WHEN p_cursor%NOTFOUND; l_return := l_return || ', ' || l_temp; END LOOP; CLOSE p_cursor; RETURN LTRIM(l_return, ', '); END;
si je passe :
le résultat est nickel, le champ concaténé aussi... (j'attire votre attention sur le fait que ins dépend de l'identifiant T1_3 soit de T1 au final)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from V_T1T2T3 where ins = '66';
si je passe :
(j'attire votre attention sur le fait que idp dépend de T3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from V_T1T2T3 where idp = 'AB';
C'est la catastrophe, ca ne tient pas compte du Where... et tout est renvoyé !
sauf truc bizarre ds ce qui est renvyé seul les idp de la clause Wher sont renseignés !!
les autres idp sont vides !!!
Je suis paumé
Merci d'avance si quelqu'un peut se pencher sur ce maquis
PS : je peux pas utiliser GROUP BY pour la concaténation car j'ai un champ de type BLOB à remonter sur une requête de ce modèle....
Lunab54
Partager