2016-06-14 5 views
0

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

  1. Das String-Muster ist fest und im Voraus bekannt.
  2. Auftreten des angegebenen Musters ist dynamisch, kann eine beliebige Anzahl von [Spalte: Wert] -Paare haben - sie sind tatsächlich [Tabellenspalte: Alias] gesetzt.
  3. 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.

Antwort