Oracle Database/Utilisation de fonctions/fonction LISTAGG

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


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' prenom, 'F' sexe, 25 age from dual union --Pour la 1ere 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
   )
   
--select * from Groupe;
SELECT LISTAGG(prenom, ', ') WITHIN GROUP (ORDER BY prenom) "Membres féminins du groupe" FROM Groupe WHERE sexe='F';
--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 »)

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


-- Résultat du 2eme select :

Membres féminins du groupe
-----------------------------------------------------------------
Claire, Marie, Natacha


-- Résultat du 3eme select :

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