oracle使用DBMS_RANDOM包生成随机数据
(一)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 |
用来定义返回的字符串的样式:
否则返回大写字母字符串。 |
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包生成随机数据的更多相关文章
- Oracle之DBMS_RANDOM包详解
DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使 ...
- Oracle中dbms_random包详解
Oracle之DBMS_RANDOM包详解参考自:https://www.cnblogs.com/ivictor/p/4476031.html https://www.cnblogs.com/shen ...
- MOCK.JS 生成随机数据,拦截 Ajax 请求
mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...
- mock的使名用一(生成随机数据)
Mock.Random 是一个工具类,用于生成各种随机数据. Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) . var Random = Moc ...
- Python之机器学习-sklearn生成随机数据
sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotli ...
- 在Sqlserver中生成随机数据
百度了各种随机生成,集中摘录如下: 一.循环写入千万级测试数据 DECLARE @i int ) BEGIN INSERT INTO A_User(username,password,addtime, ...
- Python Faker的使用(1):基础使用方法与函数速查,生成随机数据
在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据. 在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一 ...
- Python 脚本生成测试数据,Python生成随机数据,Python生成大量数据保存到文件夹中
代码如下: import random import datetime import time dataCount = 10*100*100 #10M. codeRange = range(ord(' ...
- python生成随机数据插入mysql
import random as r import pymysql first=('张','王','李','赵','金','艾','单','龚','钱','周','吴','郑','孔','曺','严' ...
随机推荐
- python logging的应用
#-*-coding:utf-8-*-#util import logging import logging from logging.handlers import RotatingFileHand ...
- ES6中的import()函数
import(specifier) 上面代码中,import函数的参数specifier,指定所要加载的模块的位置.import命令能够接受什么参数,import()函数就能接受什么参数,两者区别主要 ...
- JavaEE之JavaWeb核心之Servlet
Servlet简介: Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的 ...
- 警告: 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 ...
- 数据结构与算法C语言所有头文件汇总 —— 持续更新
header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { ...
- 10_Redis实现分布式锁
来源:吴兆锋, https://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁: ...
- JNLP文件具体说明编辑
JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应 ...
- 第四次作业——第一次scrum冲刺
1.小组第一次冲刺任务 对Github上的HUSTOJ开源项目进行Fork,搭建基本环境 2.用户需求 (1)部分基本功能显示在首页 (2)能够提交题目并判题,并对自己所提交的题目正确性进行反馈,能够 ...
- C++ inheritance: public, private. protected ZZ
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- 最新-Linux常用命令大全-随时更新
一.系统管理与设置 1.信息显示命令 # man & info //帮助手册 # man 命令 //显示相应命令的帮助内容 # arch //显示当前系统体系结构 # cal //显 ...