(一)DBMS_RANDOM包信息

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

  1. SQL> desc dbms_random
  2. Element Type
  3. ---------- ---------
  4. VALUE FUNCTION
  5. NORMAL FUNCTION
  6. STRING FUNCTION
  7. RANDOM FUNCTION
  8. INITIALIZE PROCEDURE
  9. SEED PROCEDURE
  10. TERMINATE PROCEDURE
  11. NUM_ARRAY TYPE

(二)各个模块的用法

(2.1)dbms_random.value ( function)

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

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

语法:

  1. DBMS_RANDOM.VALUE
  2. RETURN NUMBER;
  3.  
  4. --或是
  5. DBMS_RANDOM.VALUE(
  6. low IN NUMBER
  7. high IN NUMBER)
  8. RETURN NUMBER;

例子:

  1. --默认生成01之间的随机数
  2. SQL> select dbms_random.value from dual;
  3.  
  4. VALUE
  5. ----------
  6. 0.28510444
  7.  
  8. --输入上下限,生成10~20之间的随机数
  9. SQL> select dbms_random.value(10,20) from dual;
  10.  
  11. DBMS_RANDOM.VALUE(10,20)
  12. ------------------------
  13. 14.8069717352864

(2.2)dbms_random.normal(function)

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

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

图1.正态分布

 语法:

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

例子:

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

(2.3)dbms_random.string(function)

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

语法:

  1. DBMS_RANDOM.STRING(
  2. opt IN CHAR,
  3. len IN NUMBER)
  4. RETURN VARCHAR2;

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

Parameter Description
opt

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

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

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

len 返回字符串的长度

例子:

  1. --返回大写字母组成的字符串
  2. SQL> select dbms_random.string('u',10) from dual;
  3. DBMS_RANDOM.STRING('U',10)
  4. ------------------------------------
  5. RLYKTDIRGI
  6.  
  7. --返回小写字母组成的字符串
  8. SQL> select dbms_random.string('l',10) from dual;
  9. DBMS_RANDOM.STRING('L',10)
  10. -------------------------------------
  11. auyuhusjfe
  12.  
  13. --返回大小写混合的字符串
  14. SQL> select dbms_random.string('a',10) from dual;
  15. DBMS_RANDOM.STRING('A',10)
  16. -------------------------------------
  17. OyNQIrlzVW
  18.  
  19. --返回大写字母+数字混合的字符串
  20. SQL> select dbms_random.string('x',10) from dual;
  21. DBMS_RANDOM.STRING('X',10)
  22. -----------------------------------------
  23. XEXVNQ7Y5R
  24.  
  25. --返回任意可以打印的字符串
  26. SQL> select dbms_random.string('p',10) from dual;
  27. DBMS_RANDOM.STRING('P',10)
  28. --------------------------------------
  29. .ZPb-V.i.-
  30.  
  31. --如果指定的不是上面的参数,则返回大写字母组成的字符串
  32. SQL> select dbms_random.string('s',10) from dual;
  33. DBMS_RANDOM.STRING('S',10)
  34. ------------------------------------
  35. 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.”

语法:

  1. DBMS_RANDOM.RANDOM
  2. RETURN binary_integer;

例子

  1. SQL> select dbms_random.random from dual;
  2.  
  3. RANDOM
  4. ----------
  5. 325418642

(2.5)dbms_random.initialize(procedure)

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

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

语法:

  1. DBMS_RANDOM.INITIALIZE(
  2. val IN BINARY_INTEGER);

(2.6)dbms_random.seed(procedure)

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

语法:

  1. DBMS_RANDOM.SEED (
  2. val IN BINARY_INTEGER);
  3.  
  4. --或者
  5. DBMS_RANDOM.SEED (
  6. val IN VARCHAR2);

例子:

  1. --未设定seed2次执行同一个pl/sql块,结果不同

  2. --第1次执行
  3. SQL> begin
  4. 2 for i in 1..5 loop
  5. 3 dbms_output.put_line(dbms_random.value(1,10));
  6. 4 end loop;
  7. 5 end;
  8. 6 /
  9.  
  10. 7.59767929575396153812259452034656438431
  11. 6.97539265222375730852839307412202430431
  12. 7.33806531652342308613878338447091428107
  13. 4.89245334013733738508437786557633898074
  14. 1.38879870308996313960638201385754773661
  15. PL/SQL procedure successfully completed
  16.  
  17. --第2次执行
  18. SQL> begin
  19. 2 for i in 1..5 loop
  20. 3 dbms_output.put_line(dbms_random.value(1,10));
  21. 4 end loop;
  22. 5 end;
  23. 6 /
  24.  
  25. 8.1683965227100007068358716650335800015
  26. 5.43375383239697580591581003445848864422
  27. 4.69519556951657412911331859048606134568
  28. 1.98874282533230976261862622335817894101
  29. 6.57191642048605638448861960830764815336
  30. PL/SQL procedure successfully completed
  1. --设定seed2次执行同一个pl/sql块,结果相同
  2.  
  3. --第1次执行
  4. SQL> begin
  5. 2 dbms_random.seed('jiaman');
  6. 3 for i in 1..5 loop
  7. 4 dbms_output.put_line(dbms_random.value(1,10));
  8. 5 end loop;
  9. 6 end;
  10. 7 /
  11.  
  12. 7.88871486248578462461220968538206416509
  13. 9.9339215654944111380218579659105820674
  14. 9.26587220376346888918600380784743125956
  15. 9.9630882208005389088257850931854514369
  16. 3.35183691734731293112104762732782208283
  17. PL/SQL procedure successfully completed

  18. --第2次执行
  19. SQL> begin
  20. 2 dbms_random.seed('jiaman');
  21. 3 for i in 1..5 loop
  22. 4 dbms_output.put_line(dbms_random.value(1,10));
  23. 5 end loop;
  24. 6 end;
  25. 7 /
  26.  
  27. 7.88871486248578462461220968538206416509
  28. 9.9339215654944111380218579659105820674
  29. 9.26587220376346888918600380784743125956
  30. 9.9630882208005389088257850931854514369
  31. 3.35183691734731293112104762732782208283
  32. PL/SQL procedure successfully completed

(2.7)dbms_random.terminate(procedure)

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

语法:

  1. 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. python logging的应用

    #-*-coding:utf-8-*-#util import logging import logging from logging.handlers import RotatingFileHand ...

  2. ES6中的import()函数

    import(specifier) 上面代码中,import函数的参数specifier,指定所要加载的模块的位置.import命令能够接受什么参数,import()函数就能接受什么参数,两者区别主要 ...

  3. JavaEE之JavaWeb核心之Servlet

    Servlet简介: Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的 ...

  4. 警告: The web application [ROOT] appears to have started a thread named [Thread-48] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

    1. 问题描述 tomcat跑web项目(其中依赖java项目) 出现大量上述警告 项目起不来 关键字 memory leak 内存泄漏 2. 解决方案 难道是程序写的有问题? 最终 将tomcat ...

  5. 数据结构与算法C语言所有头文件汇总 —— 持续更新

    header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { ...

  6. 10_Redis实现分布式锁

    来源:吴兆锋, https://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁: ...

  7. JNLP文件具体说明编辑

    JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应 ...

  8. 第四次作业——第一次scrum冲刺

    1.小组第一次冲刺任务 对Github上的HUSTOJ开源项目进行Fork,搭建基本环境 2.用户需求 (1)部分基本功能显示在首页 (2)能够提交题目并判题,并对自己所提交的题目正确性进行反馈,能够 ...

  9. C++ inheritance: public, private. protected ZZ

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

  10. 最新-Linux常用命令大全-随时更新

      一.系统管理与设置 1.信息显示命令 # man & info  //帮助手册 # man 命令 //显示相应命令的帮助内容 # arch  //显示当前系统体系结构 # cal  //显 ...