Tom Kyte fournit un moyen très pratique de le faire, et cela fonctionne à partir d'Oracle 9i, avec une fonction d'agrégation personnalisée. Il agrège avec des virgules, mais vous pouvez modifier le corps de la fonction pour les canaux.
À partir d'Oracle 11g, vous pouvez :
SELECT LISTAGG(column, separator) WITHIN GROUP (ORDER BY field)
FROM dataSource
GROUP BY grouping columns
Cette page web fournit des méthodes supplémentaires dont celle que vous avez listée et qui n'est effectivement pas vraiment efficace.