Можете да направите своя собствена функция. Това е една опция:
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
за да се вземат предвид различните размери на басейна - 26 за l
срещу 36 за x
. (.419354839?
). Можете също така да използвате value() и да подадете в началния и крайния диапазон на стойностите на знаците, но това ще бъде специфично за набор от знаци.
Що се отнася до това защо... има ли Oracle нужда от причина? Използването на x
може да предполагат, че първоначално е бил шестнадесетичен и е бил разширен, за да включва всички главни букви, без да им хрумне да добавят версия със смесени букви едновременно.