DBMS_RANDOM包提供了内置的随机数生成器。
大多数语言的随机函数生成器都需要提供一个种子,在Oracle中,选取种子的过程叫做初始化,再执行随机函数之前,可以不用显式地执行初始化,Oracle会自动使用日期、用户ID、进程ID来进行初始化。当然,也可以显式地初始化或者叫自定义初始化。
INITIALIZE过程
-
作用
自定义选择初始化种子,初始化DBMS_RANDOM包中的随机函数生成器
语法:
DBMS_RANDOM.INITIALIZE (
val IN BINARY_INTEGER);
val参数表示种子数字
- 示例:
SQL> exec dbms_random.initialize(1);
PL/SQL procedure successfully completed.
SEED过程
-
作用
和INITIALIZE过程作用一样,只是添加了字符串作为初始化种子的支持。
语法
DBMS_RANDOM.SEED (
val IN BINARY_INTEGER);
DBMS_RANDOM.SEED (
val IN VARCHAR2);
- 示例
SQL> exec dbms_random.seed(1828);
PL/SQL procedure successfully completed.
SQL> exec dbms_random.seed('ASDFadre');
PL/SQL procedure successfully completed.
字符串长度最多可以为2000.
RANDOM函数
-
作用:
生成[ -231,231 ]范围内的随机整数
语法:
DBMS_RANDOM.RANDOM
RETURN binary_integer;
- 示例:
SQL> select dbms_random.random from dual;
RANDOM
----------
-239250746
RANDOM函数的返回值取值范围是[ -231,231 ],因此如果我们若想得到[-1,1]范围内的伪随机结果:
SQL> select dbms_random.random/power(2,32) from dual;
DBMS_RANDOM.RANDOM/POWER(2,32)
------------------------------
.013329373
如果是[0,1],取绝对值即可
SQL> select abs(dbms_random.random/power(2,32)) from dual;
ABS(DBMS_RANDOM.RANDOM/POWER(2,32))
-----------------------------------
.061013688
若想[m,n] (m [m,n] (m 作用 在RANDOM函数的示例中,我们已经讨论了[-1,1]区间上的随机数的生成方法,而NORMAL函数就是专门用于生成[-1,1]上的随机数,[-1,1]上的随机数也叫标准正态分布的随机数。 语法 在RANDOM函数的示例中,我们已经讨论了 当没有参数时,返回 low参数表示最小值,high参数表示最大值,返回 作用 返回固定长度和格式的随机字符串 语法 opt参数控制字符串的大小写格式,可选值及含义如下: len表示字符串长度SQL> select abs(dbms_random.random/power(2,32))*(9-3)+3 from dual;
ABS(DBMS_RANDOM.RANDOM/POWER(2,32))*(9-3)+3
-------------------------------------------
5.3434754
select abs(dbms_random.random/power(2,32))*(n-m)+m from dual;
NORMAL函数
DBMS_RANDOM.NORMAL
RETURN NUMBER;
SQL> select dbms_random.normal from dual;
NORMAL
----------
-.53885116
VALUE函数
[0,1]
区间和[m,n](m
[0,1]
上的随机数,又可以生成[m,n](m
DBMS_RANDOM.VALUE
RETURN NUMBER;
DBMS_RANDOM.VALUE(
low IN NUMBER,
high IN NUMBER)
RETURN NUMBER;
[0,1]
上的随机数。[low,high]
区间内的随机数
SQL> select dbms_random.value from dual;
VALUE
----------
.835104115
SQL> select dbms_random.value(2,8) from dual;
DBMS_RANDOM.VALUE(2,8)
----------------------
2.62556781
STRING函数
DBMS_RANDOM.STRING
opt IN CHAR,
len IN NUMBER)
RETURN VARCHAR2;
‘u’或'U':表示大写字母
‘l’或‘L’:表示小写字母
‘a’或‘A’:表示大小写混合
‘x’或‘X’:表示大写字母和数字混合
‘p’或‘P’:表示任意可显示字符
SQL> select dbms_random.string('u',20) from dual;
DBMS_RANDOM.STRING('U',20)
--------------------------------------------------------------------------------
TBRGRBXIIKHZCEWKYELY
SQL> c/'u'/'l'
1* select dbms_random.string('l',20) from dual
SQL> /
DBMS_RANDOM.STRING('L',20)
--------------------------------------------------------------------------------
hujwzvftjdrazveywlkv
SQL> c/'l'/'a'
1* select dbms_random.string('a',20) from dual
SQL> /
DBMS_RANDOM.STRING('A',20)
--------------------------------------------------------------------------------
LQNjEgWzZABDcAHgDdCU
SQL> c/'a'/'x'
1* select dbms_random.string('x',20) from dual
SQL> /
DBMS_RANDOM.STRING('X',20)
--------------------------------------------------------------------------------
X0HX6GU4YB9YFTJDFSUH
SQL> c/'x'/'p'
1* select dbms_random.string('p',20) from dual
SQL> /
DBMS_RANDOM.STRING('P',20)
--------------------------------------------------------------------------------
m6mw/l[%D3BmLsgEi)l%