分享

ORACLE中DBMS_RANDOM包的用法

 爪一o_0一斗 2012-12-05

1、包定义:

 sql>desc dbms_random
Element    Type     
---------- ---------
SEED       PROCEDURE
VALUE      FUNCTION 
NORMAL     FUNCTION 
STRING     FUNCTION 
INITIALIZE PROCEDURE
RANDOM     FUNCTION 
TERMINATE  PROCEDURE
NUM_ARRAY  TYPE  

2、使用举例:

a、value() 用于返回两个数值之间的随机数,value(low,high)

      SQL> select dbms_random.value() from dual;
 
      DBMS_RANDOM.VALUE()  默认是从0到1间的数
       -------------------
      0.0536824248407651

      SQL> select dbms_random.value(10,100) from dual;
 
      DBMS_RANDOM.VALUE(10,100)
      -------------------------
      29.2420951206225

b、random() 返回的值介于2的31次方和-2的31次方之间的整形数值

     SQL>  select dbms_random.random() from dual;
 
     DBMS_RANDOM.RANDOM()
     --------------------
          2071097056
 
      SQL>  select dbms_random.random() from dual;
 
       DBMS_RANDOM.RANDOM()
      --------------------
         -1589187025 

c、string('parameter',length)

     SQL> select dbms_random.string('a',10) from dual;     --all返回不分大小写的字母字符串
 
     DBMS_RANDOM.STRING('A',10)       
      --------------------------------------------------------------------------------
      eDvKaqNWII

      SQL> select dbms_random.string('u',10) from dual;   --upper返回大写字母字符串
 
      DBMS_RANDOM.STRING('U',10)  

       --------------------------------------------------------------------------------
       KPGNYTWDGA

       SQL>  select dbms_random.string('l',10) from dual;  --little小写字母
 
       DBMS_RANDOM.STRING('L',10)
       --------------------------------------------------------------------------------
       zehtdserww

       SQL> select dbms_random.string('x',10) from dual;   ---大写字母加数字
 
       DBMS_RANDOM.STRING('X',10)
       --------------------------------------------------------------------------------
       3Z7DBA4S8I

       SQL> select dbms_random.string('p',10) from dual;  --print 所有可以打印的字符
 
        DBMS_RANDOM.STRING('P',10)
        --------------------------------------------------------------------------------
        Vj|2~cWM"K
 
        SQL> select dbms_random.string('p',10) from dual;
 
        DBMS_RANDOM.STRING('P',10)
        --------------------------------------------------------------------------------
        6_q{eci*uB


ORACLE中DBMS_RANDOM包的用法
 
1.dbms_random.value方法
 
dbms_random是一个可以生成随机数值或者字符串的程序包。这个包有initialize()、seed()、terminate()、value()、normal()、random()、string()等几个函数,但value()是最常用的,value()的用法一般有两个种,
  1) function value return number; 这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0,如下示例: 
SQL> set serverout on 
SQL> begin 
   2    for i in 1..10 loop 
   3      dbms_output.put_line(round(dbms_random.value*100)); 
   4    end loop; 
   5  end;   www.2cto.com  
   6  / 
46 
19 
45 
37 
33 
57 
61 
20 
82 
PL/SQL 过程已成功完成。 
    
2)value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限,“学无止境”兄说的就是第二种,如下: 
SQL> begin 
   2    for i in 1..10 loop 
   3      dbms_output.put_line(trunc(dbms_random.value(1,101))); 
   4    end loop; 
   5  end;   www.2cto.com  
   6  / 
97 
77 
13 
86 
68 
16 
55 
36 
54 
46 
  
PL/SQL 过程已成功完成。 
 
2. dbms_random.string 方法
某些用户管理程序可能需要为用户创建随机的密码。使用10G下的dbms_random.string 可以实现这样的功能。
 
例如:
SQL> select dbms_random.string('P',8 ) from dual ;
 
DBMS_RANDOM.STRING('P',8)
--------------------------------------------------------------------------------
3q<M"yf[
第一个参数的含义:
 'u', 'U' - returning string in uppercase alpha characters
 'l', 'L' - returning string in lowercase alpha characters
 'a', 'A' - returning string in mixed case alpha characters
 'x', 'X' - returning string in uppercase alpha-numeric
characters
 'p', 'P' - returning string in any printable characters.
Otherwise the returning string is in uppercase alpha
characters.
P 表示 printable,即字符串由任意可打印字符构成
而第二个参数表示返回的字符串长度。
 
3. dbms_random.random 方法
    random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数
  与dbms_random.value 的区别举例:
   Order By dbms_random.value;
 
这条语句功能是实现记录的随机排序
另外:dbms_random.value 和
dbms_random.random 两者之间有什么区别?
1。Order By dbms_random.value ,为结果集的每一行计算一个随机数,dbms_random.value 是结果集的一个列(虽然这个列并不在select list 中),然后根据该列排序,得到的顺序自然就是随机的啦。
 
2。看看desc信息便知道vlue和random这两个函数的区别了,value返回的是number类型,tb并且返回的值介于1和0之间,而random返回的是BINARY_INTEGER类型(以二进制形式存储的数字,据说运算的效率高于number但我没测试过,但取值范围肯定小于number,具体限制得查资料了)
如果你要实现随机排序,还是用value函数吧
 
4. dbms_random.normal方法
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
 
5. dbms_random.send方法  
用于生成一个随机数种子,设置种子的目的是可以重复生成随机数,用于调试。否则每次不同,难以调度。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多