Tenzij u het in een opgeslagen procedure gebruikt om de uitvoer op te slaan als een array (of verzameling), een query met LISTAGG
zou voldoende moeten zijn en geeft dezelfde output.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
In Oracle hebben we geen eenvoudige conversiefunctie zoals array_agg
. U kunt echter een door de gebruiker gedefinieerd verzamelingstype maken en vervolgens CAST
. gebruiken en COLLECT
functies om het te converteren naar een NESTED TABLE
om dezelfde gewenste output te krijgen.
Maak eerst een verzameling TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Het uitvoeren van deze query is gelijk aan het gebruik van string_agg
of LISTAGG
, hoewel categories
is een array of verzameling , in plaats van een tekenreeks.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |