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
Barbara Streisandoriginal
2025-01-15 12:25:44725parcourir

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 :

<code class="language-sql">SELECT
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names
FROM table_x
GROUP BY col1</code>

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 :

<code class="language-sql">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;
/</code>

Utilisation :

<code class="language-sql">SELECT col1, get_concatenated_values(col1) FROM table_name;</code>

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 :

<code class="language-sql">SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;</code>

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:
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