select regexp_substr('a,b,c,d', '[^,]+', 1, rownum), length('a,b,c,d') - length(replace('a,b,c,d', ',', '')) + 1, rownum, length(replace('a,b,c,d', ',', '')), length('a,b,c,d') from dual connect by rownum <= length('a,b,c,d') - length(replace('a,b,c,d', ',', '')) + 1;