Hola que tal, sin cursores se me ocurriria algo asi, pero ojo, no te lo va a separar por campos sino por comas.
Código:
SELECT
codigo,
rtrim (xmlagg (xmlelement (e,codigo_dep || ',')).extract ('//text()'), ',') codigo_dep,
rtrim (xmlagg (xmlelement (e, telefono || ',')).extract ('//text()'), ',') telefono
FROM x
GROUP BY codigo
Y el resultado es asi
Código:
codigo codigo_dep telefono
1 3,2,1 3333,2222,1111
2 5,4 5555,4444
Con unos instr y unos substring logras separarlos en campos. Pero deben existir muchas mas formas menos rebuscadas que esta para lograr lo que quieres. Esto se me ocurrio ahorita.
Si se me ocurre algo en el transcurso del dia lo coloco.
Saludos.