SELECT substr(main_string, position_from + 1, position_to - position_from - 1) FROM (SELECT main_string,decode(rownum - 1, 0, 0, instr(main_string, ',', 1, rownum - 1)) position_from,instr(main_string, ',', 1, rownum) position_toFROM (SELECT 'PLSQL1,PLSQL2,PLSQL3,PLSQL4,' main_stringFROM dual)CONNECT BY LEVEL <= length(main_string))WHERE position_to > 0
FROM (SELECT 'PLSQL1,PLSQL2,PLSQL3,PLSQL4,' main_string
select count(*) from (SELECT substr(main_string, position_from + 1, position_to - position_from - 1) FROM (SELECT main_string,decode(rownum - 1, 0, 0, instr(main_string, ',', 1, rownum - 1)) position_from,instr(main_string, ',', 1, rownum) position_toFROM (SELECT 'PLSQL1,PLSQL2,PLSQL3,PLSQL4,' main_stringFROM dual)CONNECT BY LEVEL <= length(main_string))WHERE position_to > 0)