Heim >Datenbank >MySQL-Tutorial >Wie kann ich in Oracle mehrere Zeilen zu einer einzigen Zeile verketten, ohne eine gespeicherte Prozedur zu verwenden?
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)
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;
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!