Du kan lave din egen funktion. Dette er en mulighed:
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
Du vil måske justere 0.5
for at tage højde for de forskellige poolstørrelser - 26 for l
vs. 36 for x
. (.419354839?
). Du kan også bruge value() og pass i start- og slutområdet for tegnværdierne, men det ville være karaktersætspecifikt.
Med hensyn til hvorfor... har Oracle brug for en grund? Brugen af x
kan tyde på, at det oprindeligt var hexadecimalt og blev udvidet til at omfatte alle store bogstaver, uden at det faldt dem ind at tilføje en version med blandede bogstaver på samme tid.