У меня есть строка. В этой строке мне нужно заменить все специальные символы (0-31 коды) на выбранное представление. Представления могут быть разных форматов. Может быть \ x ??, или \ 0 ???, или 10,13 -> \ n, 9 -> \ t, а все остальные символы преобразуются в нуль. Резюме. Мне нужно найти все символы с кодами 0-31 и заменить их все для соответствующего представления, которое может быть ноль или более символов.Заменить (перевести) один символ на многие
Решение должно работать в 9.2 Oracle (это не означает, что regexp) и shuld быть очень быстрым.
Я знаю, что функция TRANSLATE очень быстрая. Buth там я не могу заменить один символ для многих. Я могу заменить только один на один.
Мое варварское (и простое) решение состоит в создании списков с 32 элементами для каждого представления. Чем выбранное представление делает цикл над списком. Внутри цикла вызовите функцию REPLACE. В этом случае я всегда вызывал бы замену 32 раза. Я думаю, что это дорого.
У вас есть идеи?
Пожалуйста, ваши «варварское решение» - это звучит как способ пойти в этом сценарий. Тогда мы можем указать, можно ли сделать его более эффективным. В конце концов, я подозреваю, что потребуется целая куча звонков на REPLACE, но может быть дешевле, чем вы думаете. –
ok)) Я пробовал много способов и обнаружил, что много вложенных REPLACE является наиболее эффективным способом. Предопределенные списки с 32 элементами, работающими как минимум в два раза медленнее. Плюс, ACE из Oracle Forum говорит, что он успешно использует вложенные замены во многих проектах. см. Мое решение ниже ... – drnk