Это, похоже, ошибка в реализации Oracle стандартной функции XQuery fn:replace()
. Использование метасимвола \W
приводит к сбою fn:replace
для каждой строки, которую я тестировал. Я бы предложил открыть запрос на обслуживание с помощью Oracle Support , чтобы сообщить об этом.
Вы можете проверить, используя не Oracle XQuery-тестер (например, здесь ) что replace()
должен нормально обрабатывать \W
.
Как ни странно, устаревшая функция ora: replace () работает правильно. Таким образом, вы можете использовать это в качестве обходного пути, пока Oracle не исправит ошибку. Но обратите внимание, что эта функция нестандартна - например, она поддерживает метасимволы POSIX-стиля (например, [[:alnum:]]
), чего нет в стандарте XQuery.
Я упростил ваш запрос, чтобы дать более минимальный проверяемый пример, и может воспроизвести проблему на Oracle 12.2.0.1. Закомментируйте столбец "fn", чтобы получить правильные результаты.
select
regexp_replace('asd-kasd','\W','') as rr, -- normal regexp engine works fine
-- \W fails, with any string
xmlquery('fn:replace("asd-kasd","\W","")' returning content) as fn,
-- deprecated ora:replace works fine
xmlquery('ora:replace("asd-kasd","\W","")' returning content) as ora
from dual
Скрипка