Maison > base de données > tutoriel mysql > Comment remplacer le GROUP_CONCAT de MySQL dans Oracle ?

Comment remplacer le GROUP_CONCAT de MySQL dans Oracle ?

Barbara Streisand
Libérer: 2025-01-15 12:25:44
original
739 Les gens l'ont consulté

How to Replace MySQL's GROUP_CONCAT in Oracle?

L'équivalent d'Oracle au GROUP_CONCAT de MySQL

La fonction GROUP_CONCAT de MySQL combine efficacement plusieurs lignes en une seule chaîne. Oracle propose plusieurs façons d'obtenir le même résultat, selon la version de votre base de données.

LISTAGG : La méthode préférée (Oracle 11g et versions ultérieures)

La fonction LISTAGG est l'approche recommandée pour les versions Oracle modernes (11g et supérieures). Il fournit une solution propre et efficace pour concaténer des valeurs au sein de groupes :

SELECT
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names
FROM table_x
GROUP BY col1
Copier après la connexion

Cette requête regroupe les lignes par col1 et concatène les valeurs col2 correspondantes, séparées par des virgules et des espaces, classées par col2.

Fonction personnalisée : pour les anciennes versions d'Oracle (10g et versions antérieures)

Pour Oracle 10g et versions antérieures dépourvues de LISTAGG, une fonction personnalisée est nécessaire :

CREATE OR REPLACE FUNCTION get_concatenated_values (input_val IN NUMBER)
  RETURN VARCHAR2
IS
  concatenated_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    concatenated_text := concatenated_text || ',' || x.col2;
  END LOOP;
  RETURN LTRIM(concatenated_text, ',');
END;
/
Copier après la connexion

Utilisation :

SELECT col1, get_concatenated_values(col1) FROM table_name;
Copier après la connexion

Cette fonction parcourt les lignes correspondant à la valeur d'entrée et ajoute les valeurs col2 à une chaîne. La fonction LTRIM supprime la virgule de début.

WM_CONCAT : À utiliser avec prudence

Certaines anciennes versions d'Oracle peuvent inclure WM_CONCAT. Cependant, il s'agit d'une fonction non prise en charge et son comportement peut être incohérent selon les versions. Par conséquent, il est fortement conseillé d'éviter WM_CONCAT et d'utiliser LISTAGG ou une fonction personnalisée à la place :

SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;
Copier après la connexion

Choisissez la méthode appropriée à votre version d'Oracle. LISTAGG est la solution préférée et la plus fiable pour les versions plus récentes. Pour les anciennes versions, la fonction personnalisée constitue une alternative robuste. Évitez WM_CONCAT sauf si cela est absolument nécessaire et comprenez ses limites.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal