Maison >base de données >tutoriel mysql >Comment puis-je concaténer plusieurs lignes en une seule ligne dans Oracle sans utiliser de procédure stockée ?

Comment puis-je concaténer plusieurs lignes en une seule ligne dans Oracle sans utiliser de procédure stockée ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 20:02:401090parcourir

How Can I Concatenate Multiple Rows into a Single Row in Oracle Without Using a Stored Procedure?

Concaténation de plusieurs lignes en une seule ligne dans Oracle sans procédure stockée

Lorsque vous travaillez avec des données dans Oracle, il peut y avoir des cas où vous besoin de combiner plusieurs lignes en une seule ligne. Traditionnellement, cela pouvait être réalisé à l’aide d’une procédure stockée. Cependant, il existe une solution plus efficace et plus simple utilisant la clause LISTAGG d'Oracle.

La clause LISTAGG dans Oracle

Introduite dans Oracle 11gR2, la clause LISTAGG vous permet de concaténer plusieurs valeurs dans une seule chaîne. Il prend la syntaxe suivante :

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
  • expression :La colonne ou l'expression que vous souhaitez concaténer.
  • délimiteur :Le séparateur que vous souhaitez utiliser entre les valeurs (par exemple, un virgule).
  • colonne :La colonne utilisée pour classer les valeurs au sein de chaque groupe.

Exemple

Considérez l'ensemble de données suivant :

question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12

Pour concaténer les valeurs element_id pour chaque question_id sur une seule ligne, nous pouvons utiliser la requête suivante :

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM your_table
GROUP BY question_id;

Sortie

question_id element_id
1 7,8
2 9
3 10,11,12

Considérations relatives aux grandes chaînes de résultats

Si la chaîne résultante devrait dépasser 4 000 caractères (la longueur maximale pour un type de données VARCHAR2), vous pouvez utiliser ce qui suit amélioration introduite dans Oracle 12cR2 :

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) ON OVERFLOW TRUNCATE/ERROR
FROM your_table
GROUP BY question_id;
  • ON OVERFLOW TRUNCATE : Tronque la chaîne de résultat si elle dépasse la longueur spécifiée.
  • ON OVERFLOW ERREUR : Génère une erreur si la chaîne de résultat dépasse la valeur spécifiée longueur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn