zoukankan      html  css  js  c++  java
  • dbms_random 包的使用

    dbms_random是一个可以生成随机数值或者字符串的程序包。

    这个包有

    initialize(),seed(),terminate(),value(),normal(),random(),string(), 其中常用的有value(),random(),string()

     

    第一种:FUNCTION value RETURN NUMBER;

    说明:

    这种用法没有参数,会返回一个具有38位精度的数值,范围从0.01.0,但不包括1.0

    示例:

    SQL> select dbms_random.value from dual;

         VALUE
    ----------
    .380571276

    第二种FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;

    说明:value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限

    示例:

    SQL> select dbms_random.value(1,100) from dual;

    DBMS_RANDOM.VALUE(1,100)
    ------------------------
                  30.3766439

    2. dbms_random.string 方法

    FUNCTION string (opt CHAR, len NUMBER) RETURN VARCHAR2;

    说明:某些用户管理程序可能需要为用户创建随机的密码。使用10G下的dbms_random.string 可以实现这样的功能

    参数:

          opt 

     '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-numericcharacters

     'p', 'P' - returning string in any printable characters.Otherwise the returning string is in uppercase alphacharacters.

    len 

    表示返回的字符串长度。

    示例:

    SQL> select dbms_random.string('U',4) FROM DUAL;

    DBMS_RANDOM.STRING('U',4)
    --------------------------------------------------------
    BFJN

    已用时间:  00: 00: 00.00
    SQL> select dbms_random.string('l',3) from dual;

    DBMS_RANDOM.STRING('L',3)
    --------------------------------------------------------
    qlw

    已用时间:  00: 00: 00.01
    SQL> select dbms_random.string('a',5) from dual;

    DBMS_RANDOM.STRING('A',5)
    --------------------------------------------------------
    Lfjsl

    已用时间:  00: 00: 00.00
    SQL> select dbms_random.string('X',6) FROM DUAL;

    DBMS_RANDOM.STRING('X',6)
    --------------------------------------------------------
    OYQYZV

    已用时间:  00: 00: 00.00
    SQL> select dbms_random.string('X',6) FROM DUAL;

    DBMS_RANDOM.STRING('X',6)
    --------------------------------------------------------
    FE2LKH

    已用时间:  00: 00: 00.00
    SQL> select dbms_random.string('p',7) from dual;

    DBMS_RANDOM.STRING('P',7)
    --------------------------------------------------------
    D^?C+l%

    已用时间:  00: 00: 00.00

    3. dbms_random.random 方法

     

    FUNCTIONrandomRETURN BINARY_INTEGER;

    说明:

    random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数。

    示例:

    SQL> select dbms_random.random from dual;

        RANDOM
    ----------
    -1.394E+09

    已用时间:  00: 00: 00.00

    备注:dbms_random.value 和 dbms_random.random 两者之间有什么区别?

    1、Order By dbms_random.value ,为结果集的每一行计算一个随机数,dbms_random.value 是结果集的一个列(虽然这个列并不在select list 中),然后根据该列排序,得到的顺序自然就是随机的啦。

    SQL> select object_id from dba_objects where rownum<20 order by dbms_random.random;

     OBJECT_ID
    ----------
            43
            28
            20
            40
             9
            17
            29
            51
            25
            13
            56
             7
            54
            15
            38
             3
            41
            26
            46

    已选择19行。

    2、value返回的是number类型,并且返回的值介于1和0之间,而random返回的是BINARY_INTEGER类型(以二进制形式存储的数字,据说运算的效率高于number但我没测试过,但取值范围肯定小于number,具体限制得查资料了)

     

    4. dbms_random.normal方法

     

    FUNCTIONnormal RETURN NUMBER;

    说明:

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

     

    需要大量的数据才能看出是否是正太分布.

     

    5. dbms_random.seed方法

    PROCEDURE seed(val IN BINARY_INTEGER);PROCEDURE seed(val IN VARCHAR2);

    说明:用于生成一个随机数种子,设置种子的目的是可以重复生成随机数,用于调试。否则每次不同,难以调度。

    示例: 先执行dbms_random.seed,然后执行dbms_random.value. 最后生成的结果是固定的随机数.

    再次执行这两个函数,结果会再现.

    SQL> exec dbms_random.seed('cux');

    PL/SQL 过程已成功完成。

    已用时间:  00: 00: 00.00
    SQL> select round(dbms_random.value * 100)  from dual connect by rownum<=10;

    ROUND(DBMS_RANDOM.VALUE*100)
    ----------------------------
                              39
                              31
                              22
                              86
                              20
                              60
                              73
                              74
                               5
                              11

    已选择10行。

    已用时间:  00: 00: 00.03

    SQL> exec dbms_random.seed('cux');

    PL/SQL 过程已成功完成。

    已用时间:  00: 00: 00.00
    SQL> select round(dbms_random.value * 100)  from dual connect by rownum<=10;

    ROUND(DBMS_RANDOM.VALUE*100)
    ----------------------------
                              39
                              31
                              22
                              86
                              20
                              60
                              73
                              74
                               5
                              11

    已选择10行。

  • 相关阅读:
    keil编译器从ac5迁移到ac6
    分享一个简单易用的软件定时器模块(MultiTimer)——基于keil+stm32f103zet+hal库(裸机实现)
    PID动图——很形象
    jlink之j-scope使用
    Keil的RTX特性
    Keil5创建基于RTX的STM32工程(转载+自己的体会)
    CMSIS-RTOS 简介
    Chapter 3 Phenomenon——13
    Chapter 3 Phenomenon——12
    Chapter 3 Phenomenon——11
  • 原文地址:https://www.cnblogs.com/princessd8251/p/3551734.html
Copyright © 2011-2022 走看看