(一)DBMS_RANDOM包信息

DBMS_RANDOM包包含3个存储过程,4个函数,1个类型,一共8个模块,如下。

SQL> desc dbms_random
Element Type
---------- ---------
VALUE FUNCTION
NORMAL FUNCTION
STRING FUNCTION
RANDOM FUNCTION
INITIALIZE PROCEDURE
SEED PROCEDURE
TERMINATE PROCEDURE
NUM_ARRAY TYPE

(二)各个模块的用法

(2.1)dbms_random.value ( function)

如果不输入任何参数,该函数默认返回一个0到1之间的随机数字。准确的说,该小数取值范围为[0,1),即包含0但是不包含1。在小数点右边有38位数字。

如果输入最小值和最大值,那么将会返回一个在最小值和最大值之间的数据。

语法:

DBMS_RANDOM.VALUE
RETURN NUMBER; --或是
DBMS_RANDOM.VALUE(
low IN NUMBER
high IN NUMBER)
RETURN NUMBER;

例子:

--默认生成0到1之间的随机数
SQL> select dbms_random.value from dual; VALUE
----------
0.28510444 --输入上下限,生成10~20之间的随机数
SQL> select dbms_random.value(10,20) from dual; DBMS_RANDOM.VALUE(10,20)
------------------------
14.8069717352864

(2.2)dbms_random.normal(function)

生成一个正态分布的随机数,关于正态分布,从网上查找资料,大致可以了解到,通过dbms_random.normal生成的数据,其分布范围为:

从-1到1之间的数据占68%,从-2到2之间的数据占95%,从-3到3之间的数据占99%

图1.正态分布

 语法:

-- 注意,该function没有输入参数
DBMS_RAMDOM.NORMAL
RETURN NUMBER;

例子:

SQL> select dbms_random.normal from dual;

    NORMAL
----------
0.35939267

(2.3)dbms_random.string(function)

该函数生成一个随机字符串。

语法:

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

该函数需要传入2个参数,opt

Parameter Description
opt

用来定义返回的字符串的样式:

  • 'u', 'U' --返回大写字母的字符串
  • 'l', 'L' --返回小写字母的字符串
  • 'a', 'A' --返回大小写混合的字符串
  • 'x', 'X' -- 返回大写字母与数字结合的字符串
  • 'p', 'P' --返回任何可打印的字符串

否则返回大写字母字符串。

len 返回字符串的长度

例子:

--返回大写字母组成的字符串
SQL> select dbms_random.string('u',10) from dual;
DBMS_RANDOM.STRING('U',10)
------------------------------------
RLYKTDIRGI --返回小写字母组成的字符串
SQL> select dbms_random.string('l',10) from dual;
DBMS_RANDOM.STRING('L',10)
-------------------------------------
auyuhusjfe --返回大小写混合的字符串
SQL> select dbms_random.string('a',10) from dual;
DBMS_RANDOM.STRING('A',10)
-------------------------------------
OyNQIrlzVW --返回大写字母+数字混合的字符串
SQL> select dbms_random.string('x',10) from dual;
DBMS_RANDOM.STRING('X',10)
-----------------------------------------
XEXVNQ7Y5R --返回任意可以打印的字符串
SQL> select dbms_random.string('p',10) from dual;
DBMS_RANDOM.STRING('P',10)
--------------------------------------
.ZPb-V.i.- --如果指定的不是上面的参数,则返回大写字母组成的字符串
SQL> select dbms_random.string('s',10) from dual;
DBMS_RANDOM.STRING('S',10)
------------------------------------
POLCDVHRKE

(2.4)dbms_random.random(function)

返回一个大于或等于-power(2,31)到小于或等于power(2,31)的随机数。不过Oracle不建议使用该函数,因为在11gR1中废弃了。

“Note:This procedure is deprecated with Release 11gR1 and, although currently supported, it should not be used.”

语法:

DBMS_RANDOM.RANDOM
RETURN binary_integer;

例子

SQL> select dbms_random.random from dual;

    RANDOM
----------
325418642

(2.5)dbms_random.initialize(procedure)

该存储过程用于初始化生成器。与ramdom一样,Oracle不建议使用该函数,因为在11gR1中废弃了。

该存储过程已经过时,因为它只是简单的调用seed存储过程(原文:This procedure is obsolete as it simply calls the SEED Procedures.)

语法:

DBMS_RANDOM.INITIALIZE(
val IN BINARY_INTEGER);

(2.6)dbms_random.seed(procedure)

该存储过程用于设定种子。在设定种子之后,可以确保每次执行输出的结果相同。

语法:

DBMS_RANDOM.SEED (
val IN BINARY_INTEGER); --或者
DBMS_RANDOM.SEED (
val IN VARCHAR2);

例子:

--未设定seed,2次执行同一个pl/sql块,结果不同

--第1次执行
SQL> begin
2 for i in 1..5 loop
3 dbms_output.put_line(dbms_random.value(1,10));
4 end loop;
5 end;
6 / 7.59767929575396153812259452034656438431
6.97539265222375730852839307412202430431
7.33806531652342308613878338447091428107
4.89245334013733738508437786557633898074
1.38879870308996313960638201385754773661
PL/SQL procedure successfully completed --第2次执行
SQL> begin
2 for i in 1..5 loop
3 dbms_output.put_line(dbms_random.value(1,10));
4 end loop;
5 end;
6 / 8.1683965227100007068358716650335800015
5.43375383239697580591581003445848864422
4.69519556951657412911331859048606134568
1.98874282533230976261862622335817894101
6.57191642048605638448861960830764815336
PL/SQL procedure successfully completed
--设定seed,2次执行同一个pl/sql块,结果相同

--第1次执行
SQL> begin
2 dbms_random.seed('jiaman');
3 for i in 1..5 loop
4 dbms_output.put_line(dbms_random.value(1,10));
5 end loop;
6 end;
7 / 7.88871486248578462461220968538206416509
9.9339215654944111380218579659105820674
9.26587220376346888918600380784743125956
9.9630882208005389088257850931854514369
3.35183691734731293112104762732782208283
PL/SQL procedure successfully completed

--第2次执行
SQL> begin
2 dbms_random.seed('jiaman');
3 for i in 1..5 loop
4 dbms_output.put_line(dbms_random.value(1,10));
5 end loop;
6 end;
7 / 7.88871486248578462461220968538206416509
9.9339215654944111380218579659105820674
9.26587220376346888918600380784743125956
9.9630882208005389088257850931854514369
3.35183691734731293112104762732782208283
PL/SQL procedure successfully completed

(2.7)dbms_random.terminate(procedure)

当用完dbms_random包后,调用terminate存储过程。11gR1 版本不推荐使用此过程, 虽然当前支持, 但不应使用此过程。

语法:

dDBMS_RANDOM.TERMINATE;

(2.8)dbms_random.num_array(type)


参考文档:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_random.htm#ARPLS67506

oracle使用DBMS_RANDOM包生成随机数据的更多相关文章

  1. Oracle之DBMS_RANDOM包详解

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

  2. Oracle中dbms_random包详解

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

  3. MOCK.JS 生成随机数据,拦截 Ajax 请求

    mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...

  4. mock的使名用一(生成随机数据)

    Mock.Random 是一个工具类,用于生成各种随机数据. Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) . var Random = Moc ...

  5. Python之机器学习-sklearn生成随机数据

    sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotli ...

  6. 在Sqlserver中生成随机数据

    百度了各种随机生成,集中摘录如下: 一.循环写入千万级测试数据 DECLARE @i int ) BEGIN INSERT INTO A_User(username,password,addtime, ...

  7. Python Faker的使用(1):基础使用方法与函数速查,生成随机数据

    在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据. 在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一 ...

  8. Python 脚本生成测试数据,Python生成随机数据,Python生成大量数据保存到文件夹中

    代码如下: import random import datetime import time dataCount = 10*100*100 #10M. codeRange = range(ord(' ...

  9. python生成随机数据插入mysql

    import random as r import pymysql first=('张','王','李','赵','金','艾','单','龚','钱','周','吴','郑','孔','曺','严' ...

随机推荐

  1. CSS3自定义loading效果

    效果: 使用CSS3完成loading的制作 css样式: <style type="text/css"> .mask { position: fixed; left: ...

  2. 将ojdbc 添加到maven

    去oracle官网下载jar包 然后在jar包所在目录输入maven命令 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdb ...

  3. curl POST JSON

    1. 场景 Controller接收json格式数据 封装bean @RequestMapping(value = "/bb", method = RequestMethod.PO ...

  4. Java从入门到精通——数据库篇Mongo DB GridFS文件系统

    一.概述    GridFS是MongoDB的一种存储机制,用来存储大型二进制文件. 优点: 1.使用GridFS能够简化你的栈.如果已经在使用MongoDB,那么可以使用GridFS来代替独立的文件 ...

  5. 排序算法积累(2)----sort排序

    转载:http://blog.csdn.net/sunshangjin/article/details/40296357 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数so ...

  6. 微软发布SQL Server on Linux

    本文参考并翻译自:微软云计算与企业执行副总裁Scott Guthrie的博客. 过去的一年,不管是对于微软的数据业务,还是整个行业,都是令人惊喜的一年.在周四刚于纽约举行的Data Driven活动中 ...

  7. java访问windows远端共享文件的方法

    没密码的,直接用url访问就可以了,跟本地文件相同. 有密码的,用smb. 远端需要开启smb. win10启动smb的方法:https://jingyan.baidu.com/article/47a ...

  8. Hibernate缓存策略

    Hibernate的一级缓存又称为Session缓存,其适用范围是在当前的会话之中,其生命周期和Session相同,随着Session的销毁,一级缓存也会随之销毁.一级缓存是不能取消的,Hiberna ...

  9. electricity meter就是电表

    英式英语metre意思是度量衡里面的单位:米 美式英语拼为 meter 除了“米”,还有一个意思是“计量器”,比如 parking meter就是是路边停车投币计时器,cab meter就是出租车的计 ...

  10. MapReduce编程中常用的字符操作

    本文主要用于记录自己在编写mapreduce程序时常用的一些方法,后期会不断更新,用于自己复习和给新手一些帮助. 字符串操作 String str = " 12345"; // 字 ...