Разработчик Oracle, часто использующий в коде регулярные выражения, особенно на базах с православными настройками, рано или поздно может столкнуться с явлением, которое, кроме как мистикой, никак не назовешь. Длительные поиски причин возникновения проблемы могут привести к потере веса, аппетита и спровоцировать различного рода психосоматические расстройства — все это я сейчас и попробую предотвратить. А поможет мне в этом функция regexp_replace. Она может иметь до 6 аргументов:
REGEXP_REPLACE (
- исходная_строка,
- шаблон,
- заменяющая_строка,
- позиция начала поиска совпадения с шаблоном (по умолчанию 1),
- номер вхождения шаблона в исходную строку (по умолчанию 0 – все вхождения),
- модификатор (пока что темная лошадка)
Возвращает измененную исходную_строку, в которой все вхождения шаблона заменены значением, переданным в параметре заменяющая_строка. Зачастую пользуются короткой версией функции, где заданы 3 первых аргумента, что бывает достаточно для решения многих задач. Я тоже так сделаю. Допустим, нам нужно в строке 'MASK: lower case' замаскировать все строчные символы звездочками. Для задания диапазона строчных символов должен подойти шаблон '[a-z]'. Проверяем
select regexp_replace('MASK: lower case', '[a-z]', '*') as result from dual
Ожидание
+------------------+
| RESULT |
+------------------+
| MASK: ***** **** |
+------------------+
Реальность
+------------------+
| RESULT |
+------------------+
| *A**: ***** **** |
+------------------+
Если на вашей базе это явление не воспроизвелось, значит вам пока повезло. Но чаще начинаются копания в кодировках, конвертации строк из одного набора символов в другой и со временем наступает примерно такое состояние