Oracle Database/Utilisation de fonctions/fonction LISTAGG

Un livre de Wikilivres.

La méthode LISTAGG permet de concaténer les valeurs d'une colonne, en gérant la séparation (typiquement, avec des "," qui est le choix par défaut). Cette fonction est disponible depuis la version Oracle 11g

Illustration[modifier | modifier le wikicode]

La requête suivante illustre l'utilisation de cette fonction.

with GROUPE as (
   select 'Claire' as PRENOM, 'F' as SEXE, 25 as AGE from DUAL union      --Pour la 1re ligne, on précise les noms des colonnes
   select 'Jean-Sebastien',   'M',         32        from DUAL union      --Pour les lignes, on ne le refait pas
   select 'Marie',            'F',         23        from DUAL union
   select 'Kevin',            'M',         19        from DUAL union
   select 'Natacha',          'F',         31        from DUAL
)
   
/* 1 */ select * from GROUPE;
/* 2 */ select listAgg(PRENOM, ', ') within group (order by PRENOM) "Membres féminins du groupe" from GROUPE where SEXE = 'F'
/* 3 */ select listAgg(PRENOM, ', ') within group (order by AGE desc) "Membres trentenaires du groupe" from GROUPE where AGE > 30
;

Résultat du 1er select (« select * from GROUPE »)[modifier | modifier le wikicode]

PRENOM SEXE AGE
Claire F 25
Jean-Sebastien M 32
Kevin M 19
Marie F 23
Natacha F 31

Résultat du 2e select[modifier | modifier le wikicode]

Membres féminins du groupe
Claire, Marie, Natacha

Résultat du 3e select[modifier | modifier le wikicode]

Membres trentenaires du groupe
Jean-Sebastien, Natacha

Cas pratique d'utilisation[modifier | modifier le wikicode]

La requête suivante permet de lister les colonnes de type 'NUMBER' d'une table 'MA_TABLE', en concaténant les noms.

select listAgg(COLUMN_NAME, ', ') within group (order by COLUMN_NAME) "numberTypeColumns"
from USER_TAB_COLUMNS
where TABLE_NAME = 'MA_TABLE' and DATA_TYPE like 'NUMBER%';

Cette requête peut s'avérer utile pour utiliser la fonction UNPIVOT.