Dans MySQL, la fonction GROUP_CONCAT est largement utilisée pour concaténer des valeurs regroupées par une colonne spécifique. Oracle propose des fonctionnalités similaires via une alternative :
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names" FROM table_x GROUP BY col1;</code>
Sortie :
col1 | names |
---|---|
1 | a, b |
2 | c, d, e |
<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>
Requête en utilisant cette fonction :
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name;</code>
Remarque : Utilisez cette fonction avec prudence car elle peut rencontrer des problèmes de mémoire lors de la gestion de grands ensembles de données.
Certaines anciennes versions d'Oracle fournissent une fonction non prise en charge appelée WM_CONCAT. Cependant, il est recommandé d'utiliser LISTAGG ou une fonction personnalisée pour les versions Oracle modernes.
Pour être complet, la requête MySQL GROUP_CONCAT est fournie ci-dessous :
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1;</code>
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!