Bonjour à tous,

Merci beaucoup pour vos réponses!

Je suis parti sur cette solution (qui fonctionne très bien pour mon cas):
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
38
39
40
41
42
CREATE OR REPLACE FUNCTION bricole(liste varchar2) RETURN varchar2
IS
        fragment        varchar2(4000);
        pos_virgule     number(4);
        val_virgule 	varchar2(2);
        suite           varchar2(4000);
        pos_pct         number(4);
        val_pct         varchar2(10);
        couleur         varchar2(30);
        couleur_fmt 	varchar2(30);
        resultat        varchar2(4000);
 
begin
        -- condition de terminaison
        IF liste IS NULL then
                RETURN '';
        end IF;
 
        -- découpage
        pos_virgule:=instr(liste, ',');
		IF pos_virgule=0 then
			pos_virgule:=length(liste) + 1;
		end IF;
		fragment:=substr(liste, 1, pos_virgule-1);
		-- on ne prend ni la virgule, ni l'espace qui la suit
		suite:=substr(liste, pos_virgule + 2);
		IF suite IS NOT NULL then
			val_virgule:=', ';
		else
			val_virgule := '';
		end IF;
 
        -- traitement du premier fragment
        pos_pct:=instr(fragment, '%');
        val_pct:=substr(fragment, 1, pos_pct + 1);
        couleur:=substr(fragment, pos_pct + 2);
        couleur_fmt:=translate(lower(REPLACE(couleur, ' ', '-')), 'àÀäÄâÂéÉèÈëËêÊ', 'aaaaaaeeeeeeee');
        resultat:=val_pct || '<a href="lien_' || couleur_fmt || '.htm">' || couleur || '</a>';
 
		-- appel récursif sur la suite de la chaîne
        RETURN resultat || val_virgule || bricole(suite);
end;
Cela dit, il arrive que certains de mes enregistrements ne possèdent pas de pourcentage.
Exemple: 15% Bleu, Vert grisé
Vert, Jaune, Rouge
50% Noir, Gris clair, Bleu turquoize...

Comment gérer ces cas-là? Avez-vous une idée ?