如何从 oracle 生成大小写字母数字随机字符串?
我用过 select DBMS_RANDOM.STRING('x', 10) from dual
生成大写字母数字字符
和 select DBMS_RANDOM.STRING('a', 10) from dual
生成大写和小写字母字符
...但我想要一个可以同时处理大写和小写以及字母和数字字符的函数。
另外,如果您能想到 Oracle 没有实现此功能的充分理由,则可以加分(或只是点赞)?
最佳答案
您可以创建自己的函数。这是一种选择:
create or replace function random_str(v_length number) return varchar2 is
my_str varchar2(4000);
begin
for i in 1..v_length loop
my_str := my_str || dbms_random.string(
case when dbms_random.value(0, 1) < 0.5 then 'l' else 'x' end, 1);
end loop;
return my_str;
end;
/
select random_str(30) from dual;
RANDOM_STR(30)
--------------------------------------------------------------------------------
pAAHjlh49oZ2xuRqVatd0m1Pv8XuGs
您可能想要调整
0.5
考虑到不同的池大小 - l
为 26对比 x
的 36 . ( .419354839?
)。您还可以使用 value() 并传入字符值的开始和结束范围,但这将是特定于字符集的。至于为什么……甲骨文需要理由吗?
x
的使用可能表明它最初是十六进制的,并被扩展为包括所有大写字母,而他们却没想到同时添加了一个混合大小写的版本。
关于oracle - 在Oracle中生成大小写字母数字随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549781/