WITH sample_SQL ( line#, txt ) AS (
SELECT line#, txt
FROM dual
MODEL DIMENSION BY (1 as line#)
MEASURES (cast(null as varchar2(50)) as txt)
RULES
( txt[1] = 'SELECT count(*) cnt -- comment type#1'
, txt[2] = ' FROM dual /* comment type #2 */ table_alias'
, txt[3] = ' WHERE 1 = 1 /* start multiline comment'
, txt[4] = ' ... other comments here ...'
, txt[5] = ' ... and more here ...'
, txt[6] = ' ... end of comment */ AND 2 = 2'
, txt[7] = ';'
) ORDER BY line#
),
concat_SQL as (
SELECT listagg(txt,chr(10))within group(order by line#) txt
FROM sample_SQL
),
parms AS (
SELECT r#, pt, rr, dx
FROM dual
MODEL DIMENSION BY (1 as r#)
MEASURES(cast(null as varchar2(50)) as pt
,cast(null as varchar2(50)) as rr
,cast(null as varchar2(50)) as dx)
RULES
( pt[1] = '--.+'||chr(10) , rr[1]=chr(10) , dx[1]='double-dash'
, pt[2] = '/\*(.|'||chr(10)||')*?\*/', rr[2]='' , dx[2]='slash/asterisk'
)),
rCTE (r#, txt, dx ) AS (
SELECT 0, txt, 'original'
FROM concat_SQL
UNION ALL
SELECT parms.r#
, REGEXP_REPLACE(rCTE.txt,parms.pt,parms.rr)
, parms.dx
FROM rCTE
JOIN parms
ON rCTE.r# + 1 = parms.r#
)
SELECT *
FROM rCTE
ORDER BY r#