Oracle DBMS_RANDOM包生成随机数

前端之家收集整理的这篇文章主要介绍了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;


本文系原创,转载请表明出处!
原文链接:https://www.f2er.com/oracle/211451.html

猜你在找的Oracle相关文章