Heim > Datenbank > MySQL-Tutorial > Verfügt Oracle über eine Funktion, die MySQLs „group_concat' entspricht?

Verfügt Oracle über eine Funktion, die MySQLs „group_concat' entspricht?

Barbara Streisand
Freigeben: 2025-01-15 12:36:45
Original
860 Leute haben es durchsucht

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

Oracle- und MySQL-String-Aggregation: Finden des Äquivalents zu group_concat

Datenbankaufgaben erfordern häufig die Kombination der Daten mehrerer Zeilen zu einer einzigen Zeichenfolge. Die group_concat-Funktion von MySQL vereinfacht diesen Vorgang. Aber wie erreicht Oracle das gleiche Ergebnis?

Oracle-Lösungen

Oracle bietet mehrere Möglichkeiten, die group_concatFunktionalität von MySQL zu replizieren:

Für Oracle 11g und spätere Versionen bietet die Funktion LISTAGG ein direktes Äquivalent:

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

Dadurch werden die col2-Werte für jede col1-Gruppe sauber zusammengefasst und durch ', ' getrennt. Die ORDER BY-Klausel gewährleistet eine konsistente Zeichenfolgenreihenfolge.

Ältere Oracle-Versionen (10g und niedriger) erfordern eine benutzerdefinierte Funktion. Hier ist ein Beispiel:

<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>
Nach dem Login kopieren

Diese Funktion durchläuft Zeilen und hängt Werte an return_text an. Die Funktion LTRIM entfernt das führende Komma. Verwendung:

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

Beachten Sie, dass WM_CONCAT in einigen älteren Oracle-Versionen vorhanden war, jetzt aber nicht mehr unterstützt wird.

MySQLs group_concat zum Vergleich

Der Übersichtlichkeit halber hier die MySQL-group_concat-Syntax:

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

Dadurch werden die col2-Werte pro col1-Gruppe präzise zusammengefasst. Obwohl die explizite Ordnungsfunktion von LISTAGG fehlt, dient es einem ähnlichen Zweck.

Das obige ist der detaillierte Inhalt vonVerfügt Oracle über eine Funktion, die MySQLs „group_concat' entspricht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage