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
|
WITH LaTable(i , org) AS (
SELECT 1,'zzz' org FROM DUAL UNION ALL
SELECT 2,'pofljzzzpiuiuiizzz' FROM DUAL UNION ALL
SELECT 3,'jhjhjkkzzzpoiuzzz' FROM DUAL
),
Rec(i, l, org, n) AS (
select i, org as l, CAST(org As VARCHAR(50)) AS org, 1 as n
from LaTable
where i = 1
union ALL
select
LaTable.i,
LaTable.org,
SUBSTR(
CASE WHEN INSTR(Rec.org,'zzz' ) > 0 THEN rec.org ELSE LaTable.org END
,0
,INSTR(
CASE WHEN INSTR(Rec.org,'zzz' ) > 0 THEN rec.org ELSE LaTable.org END,
'zzz'
) -1
)
||
CAST(Rec.n AS VARCHAR(50))
||
SUBSTR(
CASE WHEN INSTR(Rec.org,'zzz' ) > 0 THEN rec.org ELSE LaTable.org END
,INSTR(
CASE WHEN INSTR(Rec.org,'zzz' ) > 0 THEN rec.org ELSE LaTable.org END,
'zzz'
)
+3
)
,Rec.n + 1
from LaTable
inner join Rec
on LaTable.i = Rec.i + CASE WHEN INSTR(Rec.org,'zzz' ) > 0 THEN 0 ELSE 1 END
)
select *
from rec
where org not like '%zzz%' |
Partager