Oracle DBMS_RANDOM包生成随机数

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的随机数。
-- 示例1: 生成10个0~1之间的随机数:
select dbms_random.value
from dual
connect by level<=10;


--示例2:生成10个1000~10000之间的随机数:
select dbms_random.value(1000,10000)
from dual
connect by level<=10;


--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。


--4. DBMS_RANDOM.STRING(opt IN CHAR, len IN NUMBER):  随机生成字符串,关于opt和len的参数说明如下:


示例:
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),返回的是整数.

示例: 随机生成10个随机数:


--6. DBMS_RANDOM.terminate(): 该函数用来在使用完DBMS_RANDOM包后,用该函数进行终止。该函数在11gR1中即不推荐使用了。
例如:
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;


本文系原创,转载请表明出处!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值