Oracle随机函数包dbms_random使用示例

 

dbms_random是oracle提供的一个随机函数包,以下介绍一些dbms_random的常用示例:

dbms_random.value用法:

生成一个大于等于0,小于等于1的38位小数

  1. -- FUNCTION value RETURN NUMBER;   
  2. select dbms_random.value from dual;   
  3. SQL> select dbms_random.value from dual;   
  4.   
  5.      VALUE   
  6. ----------   
  7. 0.61011338  
-- FUNCTION value RETURN NUMBER;
select dbms_random.value from dual;
SQL> select dbms_random.value from dual;

     VALUE
----------
0.61011338

生成一个指定范围内的数</ p>

-- FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;   
  1. select dbms_random.value(100,0)   
  2. from dual;   
  3.   
  4. SQL> select dbms_random.value(100,0)   
  5.   2  from dual;   
  6.   
  7. DBMS_RANDOM.VALUE(100,0)   
  8. ------------------------   
  9.         20.7742244285517  
-- FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
select dbms_random.value(100,0)
from dual;

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

DBMS_RANDOM.VALUE(100,0)
------------------------
        20.7742244285517
dbms_random.normal用法

获取正态分布的随机数

select dbms_random.normal from dual;   
  1.   
  2. SQL> select dbms_random.normal from dual;   
  3.   
  4.     NORMAL   
  5. ----------   
  6. -1.7330759  
select dbms_random.normal from dual;

SQL> select dbms_random.normal from dual;

    NORMAL
----------
-1.7330759
dbms_random.string用法

获取指定字符串

--FUNCTION string (opt char, len NUMBER)   
  1.   
  2.  /* "opt" specifies that the returned string may contain:   
  3.              'u','U'  :  upper case alpha characters only  
  4.              'l','L'  :  lower case alpha characters only  
  5.              'a','A'  :  alpha characters only (mixed case)   
  6.              'x','X'  :  any alpha-numeric characters (upper)   
  7.              'p','P'  :  any printable characters   
  8.           */   
  9. SQL>   
  10. select  
  11.   dbms_random.string('u',10)   
  12. from dual   
  13. union all  
  14. select  
  15.   dbms_random.string('U',10)   
  16. from dual   
  17. union all  
  18. select  
  19.   dbms_random.string('l',10)   
  20. from dual   
  21. union all  
  22. select  
  23.   dbms_random.string('L',10)   
  24. from dual   
  25. union all  
  26. select  
  27.   dbms_random.string('a',10)   
  28. from dual   
  29. union all  
  30. select  
  31.   dbms_random.string('A',10)   
  32. from dual   
  33. union all  
  34. select  
  35.   dbms_random.string('x',10)   
  36. from dual   
  37. union all  
  38. select  
  39.   dbms_random.string('X',10)   
  40. from dual   
  41. union all  
  42. select  
  43.   dbms_random.string('P',10)   
  44. from dual   
  45. union all  
  46. select  
  47.   dbms_random.string('P',10)   
  48. from dual;  
--FUNCTION string (opt char, len NUMBER)

 /* "opt" specifies that the returned string may contain:
             'u','U'  :  upper case alpha characters only
             'l','L'  :  lower case alpha characters only
             'a','A'  :  alpha characters only (mixed case)
             'x','X'  :  any alpha-numeric characters (upper)
             'p','P'  :  any printable characters
          */
SQL>
select
  dbms_random.string('u',10)
from dual
union all
select
  dbms_random.string('U',10)
from dual
union all
select
  dbms_random.string('l',10)
from dual
union all
select
  dbms_random.string('L',10)
from dual
union all
select
  dbms_random.string('a',10)
from dual
union all
select
  dbms_random.string('A',10)
from dual
union all
select
  dbms_random.string('x',10)
from dual
union all
select
  dbms_random.string('X',10)
from dual
union all
select
  dbms_random.string('P',10)
from dual
union all
select
  dbms_random.string('P',10)
from dual;

DBMS_RANDOM.STRING(‘U’,10)
—————————-
TXREHAICRI
VDTMXZORVB
udavjpudfb
hvfqhjjdgz
tZoanQzxtX
siATLEZXQa
2LWWZ3H3L5
ZF6MKKG1R7
#\j5IPva(W
sJe/srX:ZB

10 rows selected

dbms_random.seed用法

–可以设置seed来确定随机数的起始点,对于相同的seed而言,随机数的任意一次变化都将是确定的。
– 就是说,如果在某一时刻调用了seed,之后第一次产生的随机数是4,第二次是6,第三次是1,
– 那么当你再次调用相同的seed之后,一次产生的随机数还是4、6、1
– seed有两种,一种是数值型的,一种是字符型(最大长度2000)的

SELECT USERENV('SESSIONID')   
  1. FROM DUAL;   
  2. BEGIN  
  3. dbms_random.seed(6);   
  4. END;   
  5. /   
  6. SELECT DBMS_RANDOM.value   
  7. FROM DUAL   
  8. CONNECT BY LEVEL < 10;  
SELECT USERENV('SESSIONID')
FROM DUAL;
BEGIN
dbms_random.seed(6);
END;
/
SELECT DBMS_RANDOM.value
FROM DUAL
CONNECT BY LEVEL < 10;

--SESSION 1

SQL> SELECT USERENV('SESSIONID')   
  1.   2  FROM DUAL;   
  2.   
  3. USERENV('SESSIONID')   
  4. --------------------   
  5.             15140521   
  6.   
  7. SQL> BEGIN  
  8.   2  dbms_random.seed(100);   
  9.   3  END;   
  10.   4  /   
  11.   
  12. PL/SQL procedure successfully completed   
  13.   
  14. SQL> SELECT DBMS_RANDOM.value   
  15.   2  FROM DUAL   
  16.   3  CONNECT BY LEVEL < 10;   
  17.   
  18.      VALUE   
  19. ----------   
  20. 0.53801770   
  21. 0.67499536   
  22. 0.65362270   
  23. 0.76351985   
  24. 0.29859834   
  25. 0.40522032   
  26. 0.99551636   
  27. 0.39565580   
  28. 0.18074760   
  29.   
  30. rows selected  
SQL> SELECT USERENV('SESSIONID')
  2  FROM DUAL;

USERENV('SESSIONID')
--------------------
            15140521

SQL> BEGIN
  2  dbms_random.seed(100);
  3  END;
  4  /

PL/SQL procedure successfully completed

SQL> SELECT DBMS_RANDOM.value
  2  FROM DUAL
  3  CONNECT BY LEVEL < 10;

     VALUE
----------
0.53801770
0.67499536
0.65362270
0.76351985
0.29859834
0.40522032
0.99551636
0.39565580
0.18074760

9 rows selected

--SESSION 2

SQL> SELECT USERENV('SESSIONID')   
  1.   2  FROM DUAL;   
  2.   
  3. USERENV('SESSIONID')   
  4. --------------------   
  5.             15140517   
  6.   
  7. SQL> BEGIN  
  8.   2  dbms_random.seed(100);   
  9.   3  END;   
  10.   4  /   
  11.   
  12. PL/SQL procedure successfully completed   
  13.   
  14. SQL> SELECT DBMS_RANDOM.value   
  15.   2  FROM DUAL   
  16.   3  CONNECT BY LEVEL < 10;   
  17.   
  18.      VALUE   
  19. ----------   
  20. 0.53801770   
  21. 0.67499536   
  22. 0.65362270   
  23. 0.76351985   
  24. 0.29859834   
  25. 0.40522032   
  26. 0.99551636   
  27. 0.39565580   
  28. 0.18074760   
  29.   
  30. rows selected  
SQL> SELECT USERENV('SESSIONID')
  2  FROM DUAL;

USERENV('SESSIONID')
--------------------
            15140517

SQL> BEGIN
  2  dbms_random.seed(100);
  3  END;
  4  /

PL/SQL procedure successfully completed

SQL> SELECT DBMS_RANDOM.value
  2  FROM DUAL
  3  CONNECT BY LEVEL < 10;

     VALUE
----------
0.53801770
0.67499536
0.65362270
0.76351985
0.29859834
0.40522032
0.99551636
0.39565580
0.18074760

9 rows selected



转载请注明:本文来自iDB Stock:http://www.idb-stock.net/idb/2011/05/10/62.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值