Oracle Database/Utilisation de fonctions/fonction LISTAGG
Apparence
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.