Effizientes Aufteilen von durch Kommas getrennten Zeichenfolgen in Zeilen in Oracle 10g und 11g
Oracle bietet mehrere Methoden zum Aufteilen von durch Kommas getrennten Zeichenfolgen in einzelne Zeilen. Dieser verbesserte Ansatz nutzt reguläre Ausdrücke und die CONNECT BY
-Klausel für eine effizientere Lösung:
WITH temp AS ( SELECT 108 AS Name, 'test' AS Project, 'Err1, Err2, Err3' AS Error FROM DUAL UNION ALL SELECT 109, 'test2', 'Err1' FROM DUAL ) SELECT DISTINCT t.name, t.project, TRIM(REGEXP_SUBSTR(t.error, '[^,]+', 1, levels.column_value)) AS error FROM temp t, TABLE(CAST(MULTISET(SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(t.error, '[^,]+')) + 1) AS OdciNumberList)) levels
Detaillierte Erklärung:
Diese Abfrage verwendet eine hierarchische Abfrage, um die Zeichenfolgenaufteilung zu erreichen. Lassen Sie uns die Schritte aufschlüsseln:
Beispieldaten: Die WITH
-Klausel definiert eine Beispieltabelle (temp
), die durch Kommas getrennte Fehlerzeichenfolgen enthält.
Trennzeichenanzahl: LENGTH(REGEXP_REPLACE(t.error, '[^,] ')) 1
berechnet die Anzahl der Kommas plus eins (um das letzte Element zu berücksichtigen). Dies bestimmt die Anzahl der benötigten Zeilen.
Erzeugen der Sequenz: SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= ...
generiert eine Zahlenfolge von 1 bis zur Anzahl der Elemente. CONNECT BY
ist entscheidend für die Erstellung dieser Sequenz.
Erstellung einer Sammlung: MULTISET(...)
erstellt eine Sammlung (eine Reihe von Zahlen) aus der generierten Sequenz. CAST(... AS OdciNumberList)
wandelt dies in einen Oracle-Sammlungstyp um.
Tabellentransformation: TABLE(...)
wandelt die Sammlung in eine Ergebnismenge um, die es uns ermöglicht, sie mit der temp
Tabelle zu verbinden.
String-Extraktion: REGEXP_SUBSTR(t.error, '[^,] ', 1, levels.column_value)
extrahiert jeden durch Kommas getrennten Teilstring. [^,]
ist ein regulärer Ausdruck, der einem oder mehreren Zeichen entspricht, die kein Komma sind. levels.column_value
gibt die Vorkommensnummer für die Extraktion an.
Trimmen und Deduplizieren: TRIM(...)
entfernt führende/nachgestellte Leerzeichen. SELECT DISTINCT
eliminiert doppelte Zeilen und stellt sicher, dass jeder Fehler nur einmal auftritt.
Dieser Ansatz ist effizient, da er Schleifen vermeidet und die integrierten Funktionen von Oracle für eine optimierte Leistung nutzt. Der reguläre Ausdruck bietet eine robuste Methode zum Umgang mit unterschiedlichen Zeichenfolgenlängen und potenziellen Unregelmäßigkeiten in den durch Kommas getrennten Daten.
Das obige ist der detaillierte Inhalt vonWie kann ich eine durch Kommas getrennte Zeichenfolge in Oracle 10g und 11g in mehrere Zeilen aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!