A menos que lo esté utilizando en un procedimiento almacenado para guardar la salida como una matriz (o colección), una consulta con LISTAGG debería ser suficiente y da el mismo resultado.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
En Oracle, no tenemos una función de conversión directa como array_agg . Sin embargo, puede crear un tipo de colección definido por el usuario y luego usar CAST y COLLECT funciones para convertirlo en una NESTED TABLE para obtener el mismo resultado deseado.
En primer lugar, crea una colección TYPE .
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Ahora, ejecutar esta consulta es equivalente a usar string_agg o LISTAGG , aunque categories es una matriz o colección , en lugar de una cadena.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |