oracle - 在Oracle中生成大小写字母数字随机字符串

标签 oracle

如何从 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/

相关文章:

sql - PLS-00201 : identifier 'NO_EMPLOYEES' must be declared

oracle - 当我想在 oracle 中搜索最小和最大结果时,哪种方法更好?

sql - 在 Oracle 中打开 OFF 等效的 IDENTITY INSERT

php - 我应该回滚失败的 SELECT 语句还是提交成功的语句?

java - Oracle DB - 对特定批处理的未初始化集合的 Java 引用

SQL In子句值

sql - Oracle:将任意列表与从表中选择相结合

oracle - Sqoop 增量导入和更新

oracle - SQL 错误 : ORA-32361

sql - 按给定字段对多个 SQL 结果进行分组