Heim >Datenbank >MySQL-Tutorial >Wie kann ich in Oracle mehrere Zeilen zu einer einzigen Zeile verketten, ohne eine gespeicherte Prozedur zu verwenden?

Wie kann ich in Oracle mehrere Zeilen zu einer einzigen Zeile verketten, ohne eine gespeicherte Prozedur zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-05 20:02:401038Durchsuche

How Can I Concatenate Multiple Rows into a Single Row in Oracle Without Using a Stored Procedure?

Verketten mehrerer Zeilen zu einer einzelnen Zeile in Oracle ohne eine gespeicherte Prozedur

Bei der Arbeit mit Daten in Oracle kann es vorkommen, dass Sie Sie müssen mehrere Zeilen zu einer einzigen Zeile zusammenfassen. Traditionell konnte dies mithilfe einer gespeicherten Prozedur erreicht werden. Es gibt jedoch eine effizientere und einfachere Lösung mit der LISTAGG-Klausel von Oracle.

Die LISTAGG-Klausel in Oracle

Die in Oracle 11gR2 eingeführte LISTAGG-Klausel ermöglicht Ihnen die Verkettung mehrere Werte in einer einzigen Zeichenfolge. Es benötigt die folgende Syntax:

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
  • Ausdruck: Die Spalte oder der Ausdruck, die Sie verketten möchten.
  • Trennzeichen: Der Trennzeichen, das Sie zwischen den Werten verwenden möchten (z. B. a Komma).
  • Spalte: Die Spalte, die zum Ordnen der Werte innerhalb jeder Gruppe verwendet wird.

Beispiel

Betrachten Sie den folgenden Datensatz:

question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12

Um die element_id-Werte für jede questions_id zu verketten in eine einzelne Zeile können wir die folgende Abfrage verwenden:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM your_table
GROUP BY question_id;

Ausgabe

question_id element_id
1 7,8
2 9
3 10,11,12

Überlegungen für große Ergebniszeichenfolgen

Wenn erwartet wird, dass die resultierende Zeichenfolge 4000 Zeichen überschreitet (die maximale Länge für einen VARCHAR2-Datentyp), können Sie die verwenden Folgende in Oracle 12cR2 eingeführte Erweiterung:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) ON OVERFLOW TRUNCATE/ERROR
FROM your_table
GROUP BY question_id;
  • ON OVERFLOW TRUNCATE: Schneidet die Ergebniszeichenfolge ab, wenn sie die angegebene Länge überschreitet.
  • ON ÜBERLAUFFEHLER: Löst einen Fehler aus, wenn die Ergebniszeichenfolge den angegebenen Wert überschreitet Länge.

Das obige ist der detaillierte Inhalt vonWie kann ich in Oracle mehrere Zeilen zu einer einzigen Zeile verketten, ohne eine gespeicherte Prozedur zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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