sql >> Database >  >> RDS >> PostgreSQL

Equivalent van PostgreSQL's array_agg in Oracle XE 11.2

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 |

DEMO



  1. Uitgaande verbindingen volgen

  2. Gelijktijdige updates in Oracle:vergrendelen of niet?

  3. Hoe converteer ik BLOB naar VARCHAR in MySQL?

  4. Hoe kan ik een .sql-bestand importeren in mijn Heroku postgres-database?