zoukankan      html  css  js  c++  java
  • oracle中使用DBMS_RANDOM去产生随机数

    在测试过程中,经常要产生一些随机数,为此,oracle提供了DBMS_RANDOM 
    这个包去产生随机数挺好用的。下面小结下: 

    这个包有initialize()、seed()、terminate()、value()、normal()、random()、string()等几个函数 
    1)dbms_random.value 
       没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0, 
    比如: 
    for i in 1..10 loop 
         dbms_output.put_line(round(dbms_random.value*100)); 
         end loop; 


      如果带有上下限的,比如: 
    dbms_random.value(1,101) 则生成的为:将会生成下限到上限之间的数字,但不包含上限 

    2) dbms_random.string方法 


    Delect dbms_random.string('P',4 ) from dual ; 
    第一个参数含义如下 
      u', 'U' - 返回大写字母 
      'l', 'L' - 返回小写字母 
    'a', 'A' - 返回大小写混合字母 
    'x', 'X' - 大小写字母+数字混合 
    'p', 'P' - 
    P 表示 printable,即字符串由任意可打印字符构成 
    而第二个参数表示返回的字符串长度。 

    3) dbms_random.normal 
      NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。 

    4)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类型,并且返回的值介于1和0之间,而random返回的是BINARY_INTEGER类型 

    5)生成随机日期 
       Oracle将日期作为过去某个关键日期(如果你好奇的话,我可以告诉你这个日期是公元前4712年1月1日)的整数偏移量来保存。这就意味着你可以通过寻找与你希望的起始日期相对应的整数,然后向它加入一个随机的整数来随机生成一个指定范围内的日期。 

    使用TO_CHAR函数和‘J’格式代码,你可以为今天的日期生成一个内部日期数: 

    SELECT TO_CHAR(SYSDATE, 'J') FROM DUAL; 

    例如,要生成一个2012年内的任意日期,你可以首先确定2012年1月1日的日期整数; 

    SELECT TO_CHAR(TO_DATE('01/01/12','mm/dd/yy'),'J')FROM DUAL; 

    系统给的结果是2455928。所以要生成该年度内的任意日期,我们就要用带有low_value等于2455928和high_value等于2455928+365参数的DBMS_RANDOM.VALUE,再把它转换成日期: 

    SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2455928,2455928+365)),'J') FROM DUAL; 

    6) 来个综合的例子: 
      SELECT     LEVEL                                                       empl_id, 
               MOD (ROWNUM, 50000)                                         dept_id, 
               TRUNC (DBMS_RANDOM.VALUE (1000, 500000), 2)                 salary, 
               DECODE (ROUND (DBMS_RANDOM.VALUE (1, 2)), 1, 'M', 2, 'F')   gender, 
               TO_DATE (   ROUND (DBMS_RANDOM.VALUE (1, 28)) 
                        || '-' 
                        || ROUND (DBMS_RANDOM.VALUE (1, 12)) 
                        || '-' 
                        || ROUND (DBMS_RANDOM.VALUE (1900, 2010)), 
                        'DD-MM-YYYY' 
                       )                                                   dob, 
               DBMS_RANDOM.STRING ('x', DBMS_RANDOM.VALUE (20, 50))        address 
          FROM DUAL 
    CONNECT BY LEVEL < 10000;

  • 相关阅读:
    hibernate 主键利用uuid生成
    Jquery ui widget开发
    完美解决IE6不支持position:fixed的bug
    rose pipe–一次对http技术的伟大革新实现(54chen乱弹版)
    关于JBoss的Log4j的输出问题
    《rose portal & pipe技术介绍》之《变革:结构&范围》
    click() 方法和mousedown
    BigPipe具体实现细节
    获取汉字首字母,拼音,可实现拼音字母搜索npm jspinyin
    时间戳显示格式为几天前、几分钟前、几秒前vue过滤器
  • 原文地址:https://www.cnblogs.com/obsession-with-the-young-monk/p/9019525.html
Copyright © 2011-2022 走看看