1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| with t(id, contenu, rule, data)
as (select 12, 'bonjour @@Nom blablablabla comment allez-vous @@LaDate', '@@LaDate ,@@Nom', 'ce matin, pierre' from dual
union all
select 13, 'bonjour @@Nom blablablabla comment allez-vous @@LaDate à @@Lieu', '@@LaDate ,@@Nom ,@@Lieu', 'ce soir, paul, Paris' from dual
),
v (id, contenu, rule, data, cnt, lvl)
as (
select id, replace(contenu, trim(regexp_substr(rule, '[^,]+')), regexp_substr(data, '[^,]+')), rule, data, regexp_count(rule, '[^,]+'), 1
from t
union all
select id, replace(contenu, trim(regexp_substr(rule, '[^,]+', 1, lvl+1)), regexp_substr(data, '[^,]+', 1, lvl+1)), rule, data, cnt, 1 + lvl
from v
where lvl < cnt
)
select * from v
where lvl = cnt
order by id, lvl;
12 bonjour pierre blablablabla comment allez-vous ce matin @@LaDate ,@@Nom ce matin, pierre 2 2
13 bonjour paul blablablabla comment allez-vous ce soir à Paris @@LaDate ,@@Nom ,@@Lieu ce soir, paul, Paris 3 3 |
Partager