Tom Kyte oferece uma maneira muito conveniente de fazer isso e funciona no Oracle 9i, com uma função de agregação personalizada. Ele agrega com vírgulas, mas você pode modificar o corpo da função para pipes.
A partir do Oracle 11g, você pode fazer:
SELECT LISTAGG(column, separator) WITHIN GROUP (ORDER BY field)
FROM dataSource
GROUP BY grouping columns
Esta página da web fornece métodos adicionais, incluindo aquele que você listou e que, de fato, não é realmente eficiente.