Aqui está um bom artigo sobre diferentes técnicas de agregação de string .
Posso adicionar ainda outro método (baseado em XML):
select rtrim(
extract(
sys_xmlagg(
xmlelement("X",ename||', ')
),
'/ROWSET/X/text()'
).getstringval(),
', '
)
from emp;
E na versão 11g 2, finalmente temos o LISTAGG função.