Du kan göra din egen funktion. Det här är ett alternativ:
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 kanske vill justera 0.5
för att ta hänsyn till de olika poolstorlekarna - 26 för l
mot 36 för x
. (.419354839?
). Du kan också använda value() och pass i start- och slutintervallet för teckenvärdena, men det skulle vara teckenuppsättningsspecifikt.
Varför... behöver Oracle en anledning? Användningen av x
kan antyda att det ursprungligen var hexadecimalt och utökats till att omfatta alla versaler, utan att det faller dem in att lägga till en blandad version samtidigt.