Вы можете использовать translate()
с одним 10-значным случайным числом:
select translate('Transferred to account 05172262116',
'1234567890',
floor(dbms_random.value(1000000000, 10000000000))) from dual;
TRANSLATE('TRANSFERREDTOACCOUNT051
----------------------------------
Transferred to account 81677787668
Оно будет работать с любым количеством цифр в любом месте строки и сохраняет исходную длину (количество цифр)замененного значения.Он отображает исходную цифру на одну и ту же (случайную) цифру каждый раз, по крайней мере, внутри этой строки.(Если вы примените один и тот же перевод для нескольких исходных строк одновременно, они получат разные сопоставления, поскольку dbms_random
недетерминирован).
with t (s) as (
select 'Transferred to account 05172262116' from dual
union all
select 'Transferred to account 05172262116' from dual
)
select s, translate(s,
'1234567890',
floor(dbms_random.value(1000000000, 10000000000))) from t;
S TRANSLATE(S,'1234567890',FLOOR(DBM
---------------------------------- ----------------------------------
Transferred to account 05172262116 Transferred to account 57238858225
Transferred to account 05172262116 Transferred to account 95587747554
Каждая цифра в исходной строке преобразуется в соответствующую цифрув случайном числе.Например, первый вывод выше был получен из сгенерированного случайного числа 6703187918. Первая цифра вашей исходной строки была 0;это десятая цифра второго аргумента для translate()
;таким образом, вы получите 10-ю цифру (случайной) строки замены, которая является третьим аргументом этой функции - а это 8. Вторая цифра в вашей строке - 5, которая является 5-й цифрой во втором аргументе;так что вы получите 5-ю цифру в третьем аргументе - это 7. И т. д.
Можно предположить, что это достаточно случайно, я полагаю, но главная цель, по-видимому, состоит в том, чтобы остановить процесс восстановленияпервоначальная стоимость от замены.Вы могли бы потенциально узнать что-то о форме исходного значения, ища повторения нового;но, как и в случайном значении, у вас могут быть повторяющиеся символы, что не слишком далеко продвинет вас.
Например, в приведенном выше примере замена содержит строку из трех последовательных 7, поэтому вы можете подумать, что оригиналтоже имеет три последовательные цифры - но это не так.Случайное значение имело две позиции - 2-ю и 7-ю - которые отображались на 7 в новой строке, и вы не можете сказать, какое из этих отображений было применено.(Таким образом, даже если вы знали случайное значение, вы не могли вернуться к оригиналу, в этом случае, во всяком случае, - оно, конечно, не всегда будет иметь повторяющиеся числа.)