Just do:

dbms_utility.comma_to_table(replace(replace(source_str,',','@'),'|',','), ret_num, ret_tbl);
for i in ret_tbl.first..ret_tbl.last loop
ret_tbl(i) := replace(ret_tbl(i),'@',');
end loop;