Oracle dbms_random包主要用于获得随机数,可以为数字也可以为字母等,还可以实现混拼。常用函数如下:

dbms_random.value

生成一个指定范围的38位随机小数(小数点后38位),若不指定范围则默认为范围为[0,1)的随机数。

Oracle的官方说明为:The VALUE function produces numbers in the range [0,1) with 38 digits of precision.

【举例】

生成一个0~1间的随机小数(包括0,不包括1):

select dbms_random.value from dual;

返回:0.800625…

生成一个1~10间的随机小数(包括1和不包括10):

select dbms_random.value(1,10) from dual;

返回:8.5929…

dbms_random.normal

生成一个符合正态分布的随机数,此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间, 95%介于-2与+2之间,99%介于-3与+3之间。

【举例】

select dbms_random.normal from dual;

返回:1.0748…

dbms_random.random

生成一个从-power(2,31)到power(2,31)的整数值,注意,区间为左闭右开。

官方说明为:The RANDOM function produces integers in the range [-2^^31, 2^^31).

【举例】

select dbms_random.random from dual;

返回:2018005364

随机从emp表中获取3条记录

select * from (select * from scott.emp order by dbms_random.random) where rownum < 4;

dbms_random.string

生成一个指定模式指定位数的随机字符串,可选模式如下:

'u'或'U',仅返回大写字母

'l'或'L',仅返回小写字母

'a'或'A',返回大小写字母混合

'x'或'X',返回大写字母和数字混合

'p'或'P',返回任意可显示字符

【举例】

select dbms_random.string('u',10) from dual;

返回:MYYUYFQQHS

select dbms_random.string('L',10) from dual;

返回:vuzscusike

select dbms_random.string('a',10) from dual;

返回:oZoGNKAERk

select dbms_random.string('X',10) from dual;

返回:RC6IZ10FVT

select dbms_random.string('X',10) from dual;

返回:A1E-=S)w%1

dbms_random.seed

生成一个指定起始点的随机数,对于相同的seed而言,随机数任意一次变化都是确定的。

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

DBMS_RANDOM.VALUE函数

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

1. 产生一个介于0和1之间(不包含0和1)的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随机数包详解的更多相关文章

  1. ORACLE之UTL_FILE包详解

    1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        ...

  2. Oracle中dbms_random包详解

    Oracle之DBMS_RANDOM包详解参考自:https://www.cnblogs.com/ivictor/p/4476031.html https://www.cnblogs.com/shen ...

  3. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  4. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  5. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  6. 常见 jar包详解

        常见 jar包详解 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期 ...

  7. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

  8. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

  9. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

随机推荐

  1. IOS:Camera的特性分析与使用

    Camera是IOS中很重要的一个信息获取途径. 以下我们主要从硬件特性以及软件特性两个方面来看看Canera的使用,先来看看软件上我们使用Camera都能干点什么. 先来看看以下一张图: 相机软件部 ...

  2. Linux环境下的make和makefile详解

    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型 ...

  3. CRNN中英文字符识别

    代码地址如下:http://www.demodashi.com/demo/13870.html 参考GitHub源码:https://github.com/YoungMiao/crnn 应demo大师 ...

  4. 解决在sdk manager中更新文件后出现This Android SDK requires Android Developer Toolkit version 23.1的错误

    起因:在sdksdk manager中更新了adt及其它的支持库后,eclipse报错:This Android SDK requires Android Developer Toolkit vers ...

  5. ML 与 DM 工具 Weka 的使用

    1.关于Weka Weka 的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的.非商业化(与之对应的是SPSS公司商业数据 ...

  6. HTTP管线化技术--ajax请求

    1.管线化技术——客户端可以发送多次请求到服务端,而不需要等待上一次请求得到响应的时候才能进行下一次请求.实现并行发送请求 2.ajax——实现网页异步刷新 问题:当用户进行多次ajax请求的时候,并 ...

  7. Eclipse删除文件的恢复(转)

    与vs不同,在eclipse中删除的文件是不会放进回收站的, 很多人以为eclipse是直接在磁盘删除文件,所以一般都会用反删除软件恢复. 其实不必那么麻烦的,只要对着被删除文件的上一层目录按右键, ...

  8. 查看nginx的版本

    查看nginx的版本 -v 显示 nginx 的版本-V 显示 nginx 的版本,编译器版本和配置参数 # /app/nginx/sbin/nginx -v nginx version: nginx ...

  9. C# BeginInvoke和EndInvoke方法

    转载自:BeginInvoke和EndInvoke方法 IDE:Visual Studio 2008 本系列教程主要包括如下内容:1. BeginInvoke和EndInvoke方法 2. Threa ...

  10. resharper警告 :linq replace with single call to FirstOrDefault

    使用resharper时对linq使用的FirstOrDefault 一直产生一个警告,