Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个:

DBMS_RANDOM.VALUE函数

该函数用来产生一个随机数,有两种用法:

1. 产生一个介于01之间(不包含01)的38位精度的随机数,语法为:

 

DBMS_RANDOM.VALUE RETURN NUMBER;

 

这种用法不包含参数。

2. 产生一个介于指定范围之内的38位精度的随机数,语法为:

 

DBMS_RANDOM.VALUE(low IN  NUMBER,high IN NUMBER) RETURN NUMBER;

 

这种用法包含两参数,参数low用来指定要生成的随机数的下限,参数high指定上限,生成的随机。请注意生成的随机数有可能等于下限,但绝对小于上限,即“low<=随机数<high”

 

举个例子: 要产生一个1到100之间的数可以这样写: DBMS_RANDOM.VALUE(1,100)

 

DBMS_RANDOM.STRING函数

该函数产生一个随机字符串,语法为:

 

DBMS_RANDOM.STRING (opt IN CHAR,len IN NUMBER) RETURN VARCHAR2;

 

参数len指定生成的字符串的长度。

参数opt指定生成的字符串的样式,允许的取值及其表示的含义如下表所示:

 

取值

含义

‘u’’U’

返回一个由大写字母组成的字符串

‘l’’L’

返回一个由小写字母组成的字符串

‘a’’A’

返回一个由大写字母和小写字母组成的字符串

‘x’’X’

返回一个由大写字母和数字组成的字符串

‘p’’P’

返回一个由任意的可打印字符组成的字符串

 

举个例子: 要产生一个长度为6且只包括大写字母的字符串,可以这样写: DBMS_RANDOM.STRING('U',6)

附转:“伪随机数”和“随机种子”

首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

所 谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似 的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以 相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言, 其随机程度已足够了。伪随机数的选择是从随机种子开始的, 所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子 一样,那么同一个随机数发生器产生的随机数也会一样。一 般地,我们使用同系统时间有关的参数作为随机种子。

oracle随机数 需要用 dbms_random

ORACLE的PL/SQL提供了生成随机数和随机字符串的多种方式,罗列如下:

1、小数( 0 ~ 1)

select dbms_random.value from dual;

2、指定范围内的小数 ( 0 ~ 100 )

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

3、指定范围内的整数 ( 0 ~ 100 )

select trunc(dbms_random.value(0,100)) from dual;

4、长度为20的随机数字串

select substr(cast(dbms_random.value as varchar2(38)),3,20) from dual;

5、正态分布的随机数

select dbms_random.normal from dual;

6、随机字符串

select dbms_random.string(opt, length) from dual;

      opt可取值如下:

      'u','U'    :    大写字母

      'l','L'    :    小写字母

      'a','A'    :    大、小写字母

      'x','X'    :    数字、大写字母

      'p','P'    :    可打印字符

 

7、随机日期

select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J'from dual

通过下面的语句获得指定日期的基数

select to_char(sysdate,'J'from dual;

8、生成GUID

select sys_guid() from dual;