进入tableA.Names我得到数据:
83601 Thomas Levy
Adam Jonson
我需要用一些随机数据替换原始数据。我可以使用:
dbms_random.string('a',10) string.
结果是:
OflRDIBSoN
如何做到这一点,结果将是这样的:
45618 ERGHNYU IULB.
首先它应该计算值:
83601 - 5 letter
Thomas - 6 letter
Levy - 4 letter
并且喜欢
dbms_random.string('a',5) + dbms_random.string('a',6) + dbms_random.string('a',4)
?
一种选择是将
names
拆分为单独的单词,计算它们的长度并根据该长度获取随机值。
示例显示了整个 CTE,以及我提到的所有部分,以便您可以从中选择所有内容并查看发生了什么。最终查询返回期望的结果。
样本数据:
SQL> with tablea (names) as
2 (select '83601 Thomas Levy' from dual union all
3 select '12345 Adam Jonson' from dual
4 ),
将名称拆分为单词,计算它们的长度:
5 temp as
6 (select names,
7 column_value rn,
8 regexp_substr(names, '[^ ]+', 1, column_value) str,
9 length(regexp_substr(names, '[^ ]+', 1, column_value)) len
10 from tablea cross join
11 table(cast(multiset(select level from dual
12 connect by level <= regexp_count(names, ' ') + 1
13 ) as sys.odcinumberlist))
14 )
最后,获取随机字符串并将它们聚合回来形成结果:
15 select names,
16 listagg(dbms_random.string('a', len), ' ') within group (order by names, rn) result
17 from temp
18 group by names;
NAMES RESULT
----------------- ----------------------------------------
12345 Adam Jonson TeKeJ PWbH UMYsfP
83601 Thomas Levy cLDDb ewyFap dXpc
SQL>