Oracle DBMS_RANDOM包生成随机数
发布时间:2020-12-12 15:37:28 所属栏目:百科 来源:网络整理
导读:Oracle dbms_random是一个生成随机数值或字符串的程序包。这个包包含以下几个方法: initialize() seed() terminate() value() normal() random() string() 下文分别介绍各个方法的使用方法: --1. dbms_random.value([low IN NUMBER,high IN NUMBER]): 该函
Oracle dbms_random是一个生成随机数值或字符串的程序包。这个包包含以下几个方法:
--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; 本文系原创,转载请表明出处! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |