Maison >base de données >tutoriel mysql >Comment remplacer le GROUP_CONCAT de MySQL dans 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!