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

DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符。它具有以下函数:

INITIALIZE
NORMAL
RANDOM
SEED
STRING
TERMINATE
VALUE

其中,initialize,random,terminate函数在Oracle11g中已不推荐使用,主要用于向后兼容。下面对各个函数进行举例说明
1、INITIALIZE
用一个种子值来初始化DBMS_RANDOM包。
默认情况下,DBMS_RANDOM包是根据用户、时间、会话来进行初始化,这样,即便是同一个语句,每次生成的数值都会不一样。
这样会产生一个问题,在测试环境下,如果我想每次生成的随机序列都是一样的,该怎么办?
INITIALIZE函数就很好的解决了这一问题,通过设置相同的种子值,则每次生成的随机序列都将是一样的。
语法:

DBMS_RANDOM.INITIALIZE (
val IN BINARY_INTEGER);

举例:

SQL> BEGIN
2 dbms_random.initialize(100);
3 FOR i IN 1 .. 10 LOOP
4 dbms_output.put_line(dbms_random.random);
5 END LOOP;
6 END;
7 /
163284779
751599369
659804475
1131809137
-865013504
-407075626
2128226600
-448154892
-1371178596
472933400 PL/SQL procedure successfully completed.

即便是在不同的会话中,不同的用户下,随机生成的10个值都是一样的。
2、NORMAL
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
语法:

DBMS_RANDOM.NORMAL
RETURN NUMBER;

举例:

SQL> select dbms_random.normal from dual;

NORMAL
----------
.321082788

3、RANDOM
RANDOM返回值的范围为: [-2^31, 2^31),返回的是整数。
语法:

DBMS_RANDOM.RANDOM
RETURN binary_integer;

举例:

SQL> select dbms_random.random from dual;

RANDOM
----------
-1.363E+09

4、SEED
功能和INITIALIZE函数类似,实际上,INITIALIZE函数被淘汰,推荐的替代函数即是SEED函数。与INITIALIZE函数不同的是SEED函数同时支持数值和字符作为种子值,而INITIALIZE函数只支持数值。
语法:

DBMS_RANDOM.SEED (
val IN BINARY_INTEGER);
DBMS_RANDOM.SEED (
val IN VARCHAR2);

举例:

BEGIN
dbms_random.seed('hello');
FOR i IN 1 .. 10 LOOP
dbms_output.put_line(round(dbms_random.value * 100));
END LOOP;
END;
输出如下:
58
71
33
4
39
53
93
37
20
5

其中,VARCHAR2的最大范围为2000.
5、STRING
随机生成字符串
语法:

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

关于opt和len的说明,解释如下:
取值                             含义
'u'或'U'            返回一个由大写字母组成的字符串
'l'或'L'              返回一个由小写字母组成的字符串
'a'或'A'            返回一个由大写字母和小写字母组成的字符串
'x'或'X'            返回一个由大写字母和数字组成的字符串
'p'或'P'            返回一个由任意的可打印字符组成的字符串
可见,opt指的是字符串的格式,len指的是字符串的长度。

举例:

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

VALUE
--------------------
MCPEZLEQOO SQL> select dbms_random.string('l',10) value from dual; VALUE
--------------------
laufaqufln SQL> select dbms_random.string('a',10) value from dual; VALUE
--------------------
vjEetXlItt SQL> select dbms_random.string('x',10) value from dual; VALUE
--------------------
LAMDGZE22E SQL> select dbms_random.string('p',10) value from dual; VALUE
--------------------
4LF =Q'(fP 

6、TERMINATE
在使用完DBMS_RANDOM包后,用该函数进行终止。该函数在11gR1中即不推荐使用了。
语法:

DBMS_RANDOM.TERMINATE;

举例:

SQL> exec DBMS_RANDOM.TERMINATE;
PL/SQL procedure successfully completed.

7、VALUE
语法:

DBMS_RANDOM.VALUE
RETURN NUMBER;

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

对于第一种用法,返回的值的范围为大于或等于0,小于1,带有38位精度的小数。
对于第二种用法,可指定最小值和最大值,返回值的范围为大于或等于low,小于high。
举例:

SQL> select dbms_random.value from dual;
VALUE
----------
.291782963 SQL> select dbms_random.value(10,20) from dual; DBMS_RANDOM.VALUE(10,20)
------------------------
12.4079412

Oracle中dbms_random包详解的更多相关文章

  1. Oracle之DBMS_RANDOM包详解

    DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使 ...

  2. oracle中imp命令详解 .

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

  3. Oracle中动态SQL详解(EXECUTE IMMEDIATE)

    Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类:  ...

  4. ORACLE之UTL_FILE包详解

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

  5. Oracle中的索引详解

    Oracle中的索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是 ...

  6. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  7. (转)Oracle中动态SQL详解

    本文转载自:http://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html 1.静态SQLSQL与动态SQL Oracle编译PL ...

  8. oracle中的用户详解 【转】

      oracle中的用户很多,也很令初学者费解.oracle中的帐户分为两类:一类是必需的帐户,一类是存储各种应用的帐户 用户名 密码 描述 ANONYMOUS ANONYMOUS 访问http的匿名 ...

  9. [转载]Oracle中动态SQL详解

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

随机推荐

  1. 非对称加密和linux上的 ssh-keygen 工具使用

    rsa :创造非对称加密的三个人名.原理是两个1024到2048之间的素数,以此为乘积.等... a*b=c  一般a*b为私钥端,c为公钥端.因为 c非常难算出a和b. ssh-keygen -t ...

  2. hash 哈希表 缓存表

    系统初始hash表为空,当外部命令执行时,默认会从 PATH路径下寻找该命令,找到后会将这条命令的路径记录到 hash表中,当再次使用该命令时,shell解释器首先会查看hash 表,存在将执行之,如 ...

  3. js 基本用法和语法

    js 基础用法 点击事件     <!-- 第一种点击事件方式 -->   <!-- <div class="div" onclick="aler ...

  4. request/response解决中文乱码!!!

    Request中文乱码问题以及解决方案 补充三个知识点: Get是URL解码方式.默认解码格式是Tomcat编码格式.所以URL解码是UTF-8,覆盖掉了request容器解码格式 Post是实体内容 ...

  5. ELK集群之filebeat(6)

    filebeat工作原理 ilebeat是本地文件的日志数据采集器. 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或 ...

  6. Failed to start connector [Connector[HTTP/1.1-8080]]

    错误提示:Failed to start connector [Connector[HTTP/1.1-8080]]错误原因:Tomcat端口被占用解决方案(window下):1.cmd打开命令控制台2 ...

  7. JAVA学习(六)

    今天先是把内存知识总结归纳地又学习了一遍,现在可以很清楚地描述JVM的内存是如何操作的了. 静态变量储存在方法区内存中,这个之前没有注意到,温故知新了. 如果一个引用是空的(就是指向null),那它在 ...

  8. 【JAVA】笔记(8)--- java.lang.String 精讲

    String 特性: 1.String 表示字符串类型,属于引用数据类型,所以其储存的是地址: 2.java 中规定,双引号括起来的字符串是不可变的,也就说" name "永远也只 ...

  9. 说透 Docker:基础

    既然要学习 K8S,相信各位读者都已经使用过 Docker 了,Docker 的入门是比较容易的,但 Docker 的网络和存储.虚拟化是相当复杂的,Docker 的技术点比较多,在本章中将会深入介绍 ...

  10. MySQL 1064 错误

    ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL s ...