Sofern Sie es nicht in einer gespeicherten Prozedur verwenden, um die Ausgabe als Array (oder Sammlung) zu speichern, sollte eine Abfrage mit LISTAGG
ausreichen und die gleiche Ausgabe ergeben.
select ID , LISTAGG(Category,',') WITHIN GROUP (ORDER BY ID) Categories
FROM yourtable GROUP BY ID;
in Oracle, haben wir nicht haben, eine einfache Konvertierungsfunktion wie array_agg
. Sie können jedoch einen benutzerdefinierten Sammlertyp erstellen und dann die Funktionen CAST
und COLLECT
verwenden, um sie in einen NESTED TABLE
zu konvertieren, um dieselbe gewünschte Ausgabe zu erhalten.
Zuerst erstellen Sie eine Sammlung TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Nun ist diese Abfrage ausgeführt wird äquivalent string_agg
oder LISTAGG
zu verwenden, obwohl categories
ein Array oder Sammlung, anstatt einen String.
select id, CAST (COLLECT(Category) as categorytype) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |
DEMO
tl; dr - 'LISTAGG()' wurde in 11g hinzugefügt und das Ergebnis geben setzen Sie benötigen. – Ben