No Oracle, podemos usar o
LISTAGG()
função para converter nossos resultados de consulta em uma lista separada por vírgulas. Assim, em vez de cada valor ser gerado em uma linha separada, todos os valores são gerados em uma única linha, separados por uma vírgula (ou algum outro delimitador de nossa escolha).
Exemplo
Imagine que executamos a seguinte consulta:
SELECT last_name
FROM employees
WHERE job_id = 'IT_PROG';
Resultado:
LAST_NAME ____________ Hunold Ernst Austin Pataballa Lorentz
Essa consulta retornou cinco linhas, cada uma com um valor diferente.
Se quisermos que esses valores sejam exibidos em uma única linha, podemos fazer o seguinte:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Resultado:
LISTAGG(LAST_NAME,',') ____________________________________________ Hunold, Ernst, Austin, Pataballa, Lorentz
Tudo o que fizemos foi passar o nome da coluna para o
LISTAGG()
função, bem como nosso delimitador escolhido. Podemos usar um delimitador diferente ou podemos omitir esse argumento completamente para que todos os itens sejam concatenados.
A função também aceita um
DISTINCT
cláusula (para remover valores duplicados) e uma cláusula ORDER BY
cláusula (para ordenar a saída da função). A função também pode ser bastante útil ao agrupar resultados de consultas.
Veja
LISTAGG()
Function no Oracle para mais exemplos.