Es sei denn, Sie verwenden es in einer gespeicherten Prozedur, um die Ausgabe als Array (oder Sammlung) zu speichern, eine Abfrage mit LISTAGG
sollte ausreichen und liefert die gleiche Ausgabe.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
In Oracle haben wir keine einfache Konvertierungsfunktion wie array_agg
. Sie können jedoch einen benutzerdefinierten Sammlungstyp erstellen und dann CAST
verwenden und COLLECT
Funktionen, um es in eine NESTED TABLE
umzuwandeln um die gleiche gewünschte Ausgabe zu erhalten.
Erstellen Sie zunächst eine Sammlung TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Nun entspricht die Ausführung dieser Abfrage der Verwendung von string_agg
oder LISTAGG
, obwohl categories
ist ein Array oder eine Sammlung , statt einer Zeichenfolge.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |