1.
WITH T AS (SELECT '1,2,3,4,5' AS STR FROM DUAL)
SELECT STR1
FROM ( SELECT DISTINCT
SUBSTR(T.CA,INSTR(T.CA, ',', 1, C.LV) + 1,
INSTR(T.CA, ',', 1, C.LV + 1) -(INSTR(T.CA, ',', 1, C.LV) + 1)) AS STR1
FROM (SELECT ',' || STR || ',' AS CA,LENGTH(STR || ',') -NVL(LENGTH(REPLACE(STR, ',')), 0) AS CNT FROM T) T,
(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 9) C
WHERE C.LV <= T.CNT
ORDER BY STR1);
2.
select regexp_substr('1,2,3,4,5','[^,]+',1,rownum) from dual
connect by rownum<=length('1,2,3,4,5')-length(replace('1,2,3,4,5',','))+1