Освен ако не го използвате в съхранена процедура, за да запазите изхода като масив (или колекция), заявка с LISTAGG
трябва да е достатъчно и да дава същия резултат.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
В Oracle нямаме проста функция за преобразуване като array_agg
. Можете обаче да създадете дефиниран от потребителя тип колекция, след което да използвате CAST
и COLLECT
функции, за да го преобразувате в NESTED TABLE
за да получите същия желан резултат.
Първо създайте колекция TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Сега изпълнението на тази заявка е еквивалентно на използването на string_agg
или LISTAGG
, въпреки че categories
е масив или колекция , а не низ.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |