Здесь я сделал вам модифицированную версию ответа, на которую вы ссылаетесь, который может обрабатывать произвольное (запрограммированное) количество запятых.Это довольно тяжело на CTE.Как и в большинстве ответов LISTAGG, у него будет ограничение в 4000 символов.Я также изменил ваше регулярное выражение, чтобы иметь возможность обрабатывать пустые записи в списке, на основе этого ответа .
WITH
T (N) AS --TEST DATA
(SELECT '50,100,25,5000,1000' FROM DUAL
UNION
SELECT '25464,89453,15686' FROM DUAL
UNION
SELECT '21561,68547,51612' FROM DUAL
),
nums (x) as -- arbitrary limit of 20, can be changed
(select level from dual connect by level <= 20),
splitstr (N, x, substring) as
(select N, x, regexp_substr(N, '(.*?)(,|$)', 1, x, NULL, 1)
from T
inner join nums on x <= 1 + regexp_count(N, ',')
order by N, x)
select N, listagg(substring, ',') within group (order by to_number(substring)) as sorted_N
from splitstr
group by N
;
Возможно, его можно улучшить, но эх ...