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 |