Просто быстрая проверка, можно ли заменить все вхождения одним оператором select. Если нет, мы планируем написать функцию для замены.Oracle: Замена нескольких вхождений строк
Пример строки
select '#col1:[email protected], #col2:[email protected], #col3:[email protected], #col4:[email protected], #col5:[email protected]' str from dual
Ожидаемый результат
str
---
col1 val1, col2 val2, col3 val3, col4 val4, col5 val5
код до сих пор
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
Дополнительная информация
- String шаблон фиксирован и известен заранее.
- Возникновение данного шаблона является динамическим, может иметь любое количество пар [столбец: значение] - они на самом деле [таблица column: alias] установлены.
- Я упростил образец строки для простоты, однако он содержит дополнительные сведения (таблицы соединений, где предложение и т. Д.), Поэтому нам нужно будет заменить все вхождения. Это фактически выбор.