Pokud jej nepoužíváte v uložené proceduře k uložení výstupu jako pole (nebo kolekce), dotaz s LISTAGG by měl být dostatečný a poskytuje stejný výstup.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
V oracle nemáme přímou konverzní funkci jako array_agg . Můžete však vytvořit uživatelsky definovaný typ kolekce a poté použít CAST a COLLECT funkce pro převod na NESTED TABLE získat stejný požadovaný výstup.
Nejprve vytvořte kolekci TYPE .
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Nyní je spuštění tohoto dotazu ekvivalentní použití string_agg nebo LISTAGG , ačkoli categories je pole nebo kolekce , spíše než řetězec.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |