Oracle dbms_random是一个生成随机数值或字符串的程序包。这个包包含以下几个方法:
- initialize()
- seed()
- terminate()
- value()
- normal()
- random()
- string()
--1. dbms_random.value([low IN NUMBER,high IN NUMBER]): 该函数用来获取一个0~1之间的随机数,精度为38位;相应的,如果制定了上限和下限,则返回大于等于low小于等于high的随机数。
--2. DBMS_RANDOM.INITIALIZE(val IN BINARY_INTEGER): 用种子值来初始化DBMS_RANDOM包,默认情况下,DBMS_RANDOM包是根据用户、时间、会话来进行初始化,这样,即便是同一个语句,每次生成的数值都会不一样,但这样会产生一个问题,在测试环境下,如果要求每次生成的随机数序列都是一样的,那该怎么办?INITIALIZE函数很好的解决了这个问题,通过设置种子值,则每次生成的随机序列都是一样的:
SET serveroutput ON BEGIN dbms_random.initialize(100); FOR i IN 1 .. 10 LOOP dbms_output.put_line(dbms_random.random); END LOOP; END;
--3. DBMS_RANDOM.SEED():功能和INITIALIZE函数类似,实际上,INITIALIZE函数被淘汰,推荐的替代函数即是SEED函数。与INITIALIZE函数不同的是SEED函数同时支持数值和字符作为种子值,而INITIALIZE函数只支持数值。
SET serveroutput ON BEGIN dbms_random.seed('A'); FOR i IN 1 .. 10 LOOP dbms_output.put_line(round(dbms_random.value * 100)); END LOOP; END;
注: 如果种子为字符串,则最大长度不超过2000。
示例:
select dbms_random.string('u',8) "u",dbms_random.string('U',8) "U",dbms_random.string('l',8) "l",dbms_random.string('L',8) "L",dbms_random.string('a',8) "a",dbms_random.string('A',8) "A",dbms_random.string('p',8) "p",dbms_random.string('P',8) "P" from dual;
--5. DBMS_RANDOM.random:random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数,RANDOM返回值的范围为: [-2^31,2^31),返回的是整数.
例如:
sql> exec DBMS_RANDOM.TERMINATE;
--7. DBMS_RANDOM.normal:NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
示例:
select dbms_random.normal from dual connect by level<=10;
本文系原创,转载请表明出处!