Nur eine kurze Überprüfung, ist es möglich, alle Vorkommen durch eine einzige SELECT-Anweisung zu ersetzen. Wenn nicht, planen wir, eine Funktion zu schreiben, um dies zu ersetzen.Oracle: Mehrere String-Vorkommen ersetzen
Beispiel String
select '#col1:[email protected], #col2:[email protected], #col3:[email protected], #col4:[email protected], #col5:[email protected]' str from dual
Erwartete Ausgabe
str
---
col1 val1, col2 val2, col3 val3, col4 val4, col5 val5
-Code bisher
with test_table as
(Select '#col1:[email protected], #col2:[email protected], #col3:[email protected], #col4:[email protected], #col5:[email protected]' str from dual)
select level "occurrence", REGEXP_substr(str, '#(.*?):', 1, level, 'in', 1) "column", REGEXP_substr(str, ':(.*?)@', 1, level, 'in', 1) "value"
from test_table
CONNECT BY REGEXP_COUNT(str, '#.+?:[email protected]') >= level
Weitere Details
- Das String-Muster ist fest und im Voraus bekannt.
- Auftreten des angegebenen Musters ist dynamisch, kann eine beliebige Anzahl von [Spalte: Wert] -Paare haben - sie sind tatsächlich [Tabellenspalte: Alias] gesetzt.
- Ich habe die Beispielzeichenfolge zur Vereinfachung getrimmt, aber es enthält zusätzliche Details (Tabellen-Joins, Where-Klausel usw.), so dass wir alle Vorkommen ersetzen müssten. Es ist eine Select-Anweisung.