dbms_random包
dbms_random包主要是用来生成随机数
1) dbms_random.value 返回一个大于等于0小于等于1直接的随机数
06:44:06 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.72239222
2) dbms_random.value(n,m) 返回一个大于等于n小于等于m直接的随机数
06:44:43 SCOTT@ orcl>SELECT dbms_random.value(2,5) FROM dual;
DBMS_RANDOM.VALUE(2,5)
----------------------
2.83884627
3) dbms_random.normal 从标准正态分布函数中返回一个随机数
4) dbms_random.string(opt,len) 返回一个随机的字符串
opt:
u或者U:仅包含大写字母
l或者L:仅包含小写字母
a或者A:仅包含字母,大小写混写
x或者X:任意的数字和字母组合,字母大写
p或者P:任意可打印的字符
其他的和u效果一样
len:随机字符串的长度
06:55:44 SCOTT@ orcl>select dbms_random.string('u',4) result from dual;
RESULT
----------
DYLP
1 row selected.
Elapsed: 00:00:00.01
06:55:45 SCOTT@ orcl>select dbms_random.string('a',4) result from dual;
RESULT
----------
YhMB
1 row selected.
Elapsed: 00:00:00.01
06:55:51 SCOTT@ orcl>select dbms_random.string('x',4) result from dual;
RESULT
----------
ISOJ
1 row selected.
Elapsed: 00:00:00.02
06:55:57 SCOTT@ orcl>select dbms_random.string('x',4) result from dual;
RESULT
----------
ZENX
1 row selected.
Elapsed: 00:00:00.02
06:56:01 SCOTT@ orcl>select dbms_random.string('p',4) result from dual;
RESULT
----------
D\]`
1 row selected.
06:56:06 SCOTT@ orcl>select dbms_random.string('l',4) result from dual;
RESULT
----------
lkrd
1 row selected.
3)在产生随机数之前,DBMS_RANDOM可以被显示的初始化,但这不是必须的。如果你没有初始化,它会以时间,用户ID,进程ID进行初始化。
dbms_random.seed可以显示的进行初始化,如果你两次提供的种子一样,那么两次产生的随机数也将是一样的。
session 1:
07:05:41 SCOTT@ orcl>exec dbms_random.seed(100);
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
07:05:51 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.5380177
1 row selected.
Elapsed: 00:00:00.00
07:06:01 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.674995365
1 row selected.
Elapsed: 00:00:00.00
07:06:03 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.653622701
1 row selected.
Elapsed: 00:00:00.00
session 2:
07:05:33 SCOTT@ orcl>exec dbms_random.seed(100);
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
07:06:27 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.5380177
1 row selected.
Elapsed: 00:00:00.00
07:06:37 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.674995365
1 row selected.
Elapsed: 00:00:00.00
07:06:40 SCOTT@ orcl>select dbms_random.value from dual;
VALUE
----------
.653622701
1 row selected.
Elapsed: 00:00:00.01
对比一下session 1 和seesion 2 的结果明白什么意思了吧!
4)
dbms_random.initialize;
dbms_random.random;
dbms_random.terminate
这3个过程已经过时,现在支持只是为了向后兼容,不推荐使用,这里不再介绍了。