Maison >base de données >tutoriel mysql >Oracle a-t-il une fonction équivalente au « group_concat » de MySQL ?

Oracle a-t-il une fonction équivalente au « group_concat » de MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-15 12:36:45861parcourir

Does Oracle Have a Function Equivalent to MySQL's `group_concat`?

Agrégation de chaînes Oracle et MySQL : trouver l'équivalent de group_concat

Les tâches de base de données nécessitent souvent de combiner les données de plusieurs lignes en une seule chaîne. La fonction group_concat de MySQL simplifie ce processus. Mais comment Oracle parvient-il au même résultat ?

Solutions d'Oracle

Oracle propose plusieurs façons de répliquer la group_concat fonctionnalité de MySQL :

Pour Oracle 11g et versions ultérieures, la fonction LISTAGG fournit un équivalent direct :

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

Cela regroupe soigneusement les valeurs col2 pour chaque col1 groupe, en les séparant par ', '. La clause ORDER BY garantit un ordre cohérent des chaînes.

Les anciennes versions d'Oracle (10g et inférieures) nécessitent une fonction personnalisée. Voici un exemple :

<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER)
RETURN VARCHAR2
IS
  return_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/</code>

Cette fonction parcourt les lignes, en ajoutant des valeurs à return_text. La fonction LTRIM supprime la virgule de début. Utilisation :

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

Notez que WM_CONCAT existait dans certaines anciennes versions d'Oracle mais n'est désormais plus pris en charge.

MySQL group_concat pour comparaison

Pour plus de clarté, voici la syntaxe MySQL group_concat :

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

Cela regroupe de manière concise les col2 valeurs par col1 groupe. Bien qu'il ne dispose pas de la capacité de commande explicite de LISTAGG, il sert un objectif similaire.

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