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 43 44 45 46 47 48 49 50 51 52
| WITH v AS (SELECT 1 id, '95% Rouge, 5% Vert' col FROM dual UNION ALL
SELECT 2 id, '100% Noir Bleuté' col FROM dual UNION ALL
SELECT 3 id, '50% Vert Clair, 45% Vert Foncé, 5% Vert Bizarre' col FROM dual)
SELECT /* On reconcatène les différents enregistrements comme à l'origine */
id, col,
( MAX(DECODE(num, 1, new_valeur))
|| MAX(DECODE(num, 2, ','||new_valeur))
|| MAX(DECODE(num, 3, ','||new_valeur))
|| MAX(DECODE(num, 4, ','||new_valeur))
|| MAX(DECODE(num, 5, ','||new_valeur))
|| MAX(DECODE(num, 6, ','||new_valeur))
|| MAX(DECODE(num, 7, ','||new_valeur))
|| MAX(DECODE(num, 8, ','||new_valeur))
|| MAX(DECODE(num, 9, ','||new_valeur))
|| MAX(DECODE(num, 10, ','||new_valeur)) ) new_col
FROM (/* On construit la nouvelle valeur */
SELECT id, col,
num,
pct||' <a href="'||nom_page||'.htm">'||texte||'</a>' new_valeur
FROM (/* On construit les différents éléments de la nouvelle valeur */
SELECT id, col,
num,
SUBSTR(valeur, 1, instr(valeur, '%')) pct,
TRIM(SUBSTR(valeur, INSTR(valeur, '%')+1)) texte,
TRANSLATE(LOWER(TRIM(SUBSTR(valeur, INSTR(valeur, '%')+1))), ' éèêà', '_eeea') nom_page
FROM (/* On découpe la chaine en plusieurs enregistrements */
SELECT id, col,
LEVEL num,
CASE WHEN LEVEL = 1 AND INSTR(v.col, ',', 1, LEVEL) = 0
THEN v.col
WHEN LEVEL = 1
THEN SUBSTR(v.col, 1, INSTR(v.col, ',', 1, LEVEL)-1)
WHEN INSTR(v.col, ',', 1, LEVEL) = 0
THEN SUBSTR(v.col,
INSTR(v.col, ',', 1, LEVEL - 1) + 1)
ELSE SUBSTR(v.col,
INSTR(v.col, ',', 1, LEVEL - 1) + 1,
INSTR(v.col, ',', 1, LEVEL) - INSTR(v.col, ',', 1, LEVEL - 1) -1 )
END valeur
FROM v
CONNECT BY LEVEL <= ( LENGTH(v.col) - LENGTH(REPLACE(v.col,',')) + 1 )
)
)
)
GROUP BY id, col
ORDER BY id;
ID COL NEW_COL
-- ----------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------
1 95% Rouge, 5% Vert 95% <a href="rouge.htm">Rouge</a>, 5% <a href="vert.htm">Vert</a>
2 100% Noir Bleuté 100% <a href="noir_bleute.htm">Noir Bleuté</a>
3 50% Vert Clair, 45% Vert Foncé, 5% Vert Bizarre 50% <a href="vert_clair.htm">Vert Clair</a>, 45% <a href="vert_fonce.htm">Vert Foncé</a>, 5% <a href="vert_bizarre.htm">Vert Bizarre</a> |
Partager