Oracle Database/Utilisation de fonctions/fonction LISTAGG


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

IllustrationModifier

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

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

Résultat du 2e selectModifier

Membres féminins du groupe
Claire, Marie, Natacha

Résultat du 3e selectModifier

Membres trentenaires du groupe
Jean-Sebastien, Natacha

Cas pratique d'utilisationModifier

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.