Итак, я отвечаю сам. Сначала создайте функцию:
CREATE OR REPLACE FUNCTION decode_string(in_string VARCHAR2) RETURN VARCHAR2
IS
working_string VARCHAR2(4000) := in_string;
regexp VARCHAR2(20):= '&#[[:digit:]]{3}';
utf_code CHAR(5);
replaced_char CHAR(1);
BEGIN
LOOP
utf_code := regexp_substr(working_string, regexp);
EXIT WHEN utf_code IS NULL;
replaced_char := CHR(SUBSTR(utf_code, -3, 3));
working_string := REPLACE(utf_code, replaced_char);
END LOOP;
RETURN working_string;
END;
Затем используйте эту функцию в классическом операторе обновления:
UPDATE foo
SET strfield = decode_string(strfield)
WHERE strfield LIKE '%&#___%';