ORACLE随机数DBMS_RANDOM包

简单得说,通过dbms_random包调用随机数的方法大致有4种:

1、dbms_random.normal

这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间。
    简单测试了一下,产生100000次最大能到5左右:

Sql代码

 declare
  i number:=;
  j number:=;
 begin
  for k in .. loop
  i:= dbms_random.normal;
   if i > j
    then j:=i;
   end if;
  end loop;
  dbms_output.put_line(j);
 end; 

5.15325081797418404136433867107468983182

PL/SQL procedure successfully completed

2、dbms_random.random

这个也没有参数,返回一个从-power(2,31)到power(2,31)的整数值

3、dbms_random.value

这个函数分为两种,一种是没有参数,则直接返回>=0 and <1之间的38位小数

  SQL > column value format 9.99999999999999999999999999999999999999
  SQL > select dbms_random.value from dual;

                    VALUE
  -----------------------------------------
   .58983014999643548701631750396301271752

第二种是加上两个参数a、b,则返回值在>=a and <b之间的38位小数

  SQL > column value format 999.999999999999999999999999999999999999
  SQL > select dbms_random.value(100,500) value from dual;
                    VALUE
  -----------------------------------------
   412.150194612502916808701157054098274240

注意:无论前面几位,小数点之后都是38位

可以用trunc()函数取整

4、dbms_random.string

这个函数必须带有两个参数,前面的字符指定类型,后面的数值指定位数(最大60)

类型说明:

  'u','U' : upper case alpha characters only
  'l','L' : lower case alpha characters only
  'a','A' : alpha characters only (mixed case)
  'x','X' : any alpha-numeric characters (upper)
  'p','P' : any printable characters

  SQL > column value format a30
  SQL > select dbms_random.string('u',30) value from dual;
  VALUE
  ------------------------------
  VTQNLGISELPXEDBXKUZLXKBAJMUTIA

  SQL > select dbms_random.string('l',30) value from dual;
  VALUE
  ------------------------------
  uqygsbquingfqdytpgjvdoblxeglgu

  SQL > select dbms_random.string('a',30) value from dual;
  VALUE
  ------------------------------
  NGTGkQypuSWhBfcrHiOlQwOUXkqJjy

  SQL > select dbms_random.string('x',30) value from dual;
  VALUE
  ------------------------------
  UVWONYJMXT31VEFPD736WJCJ5QT6BD

  SQL > select dbms_random.string('p',30) value from dual;
  VALUE
  ------------------------------
  :mak$(WT4M_7c/+f[_XUscf$P Zcq{

5、关于seed

可以设置seed来确定随机数的起始点,对于相同的seed而言,随机数的任意一次变化都将是确定的。

就是说,如果在某一时刻调用了seed,之后第一次产生的随机数是4,第二次是6,第三次是1,那么当你再次调用相同的seed之后,一次产生的随机数还是4、6、1

    seed有两种,一种是数值型的,一种是字符型(最大长度2000)的

  -- Seed with a binary integer
  PROCEDURE seed(val IN BINARY_INTEGER );
  PRAGMA restrict_references (seed, WNDS );

  -- Seed with a string (up to length 2000)
  PROCEDURE seed(val IN VARCHAR2 );
  PRAGMA restrict_references (seed, WNDS );

6、关于initialize

一个integer参数,注释说的很清楚了:

 -- Obsolete, just calls seed(val)
  PROCEDURE initialize(val IN BINARY_INTEGER );
  PRAGMA restrict_references (initialize, WNDS );

本文给大家介绍的ORACLE随机数DBMS_RANDOM包,就到此为止了,希望对大家学习oracle随机数有所帮助。

(0)

相关推荐

  • js生成随机数之random函数随机示例

    JavaScript Math.random()内置函数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 //返回随机数 document.write(Math.random()); //返回10-20的随机数 document.write(Math.random()*(20-10)+10); //返回指定范围的随机数(m-n之间)的公式 document.write(Math.random()*(n-m)+m); 基于时间,亦可以产生

  • javascript Math.random()随机数函数

    random函数语法 Math.random(); random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 document.write(Math.random()); 返回随机数 document.write(Math.random()*(20-10)+10); 返回10-20的随机数 document.write(Math.random()*(n-m)+m); 返回指定范围的随机数(m-n之间)的公式

  • Python random模块(获取随机数)常用方法和使用例子

    random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <b, 则 b <= n <= a 复制代码 代码如下: print random.uniform(10, 20)print rand

  • Oracle 随机数

    利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户: select * from ( select * from busi.t_ar_userinfo order by dbms_random.value) where rownum < 500: 有关dbms_random的参考文献,链接为:http://www.psoug.org/reference/dbms_random.html Deprecated. Use the methods in the

  • Oracle随机函数之dbms_random使用详解

    dbms_random是oracle提供的一个随机函数包,以下介绍一些dbms_random的常用示例: dbms_random.value用法: 生成一个大于等于0,小于等于1的38位小数 复制代码 代码如下: -- FUNCTION value RETURN NUMBER; select dbms_random.value from dual; SQL> select dbms_random.value from dual; VALUE ---------- 0.61011338 复制代码

  • c# Random快速连续产生相同随机数的解决方案

    代码如下: 复制代码 代码如下: namespace RandomTest { class Program { static void Main(string[] args) { for (int i = 0; i < 100; i++) { Random d = new Random(); Console.WriteLine(d.Next(100)); } } } } 理论上而言,这个程序会产生100个不同的0-100的整数,而实际情况却是除了第一个数字不同外,剩余99个数字会产生随机的99个

  • ORACLE随机数DBMS_RANDOM包

    简单得说,通过dbms_random包调用随机数的方法大致有4种: 1.dbms_random.normal 这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间.     简单测试了一下,产生100000次最大能到5左右: Sql代码 declare i number:=; j number:=; begin for k in .. loop i:= dbms_random.normal; if i > j then j:=i;

  • Oracle存储过程、包、方法使用总结(推荐)

    Oracle存储过程.包.方法使用总结,具体代码如示: /** *@author:zhengwei *@date:2017-04-28 *@desc:存储过程用法总结 */ CREATE OR REPLACE PROCEDURE MYPROCEDURE(P_ID IN VARCHAR, P_STATUS OUT VARCHAR) --P_ID为输入参数 ,P_STATUS为输出参数 AS ---变量声明 T_STATUS VARCHAR2(20); T_ID NUMBER; V_POSTYPE

  • oracle中utl_file包读写文件操作实例学习

    在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create or replace directory TESTFILE as '/home/oracle/zxx/test'; --给用户授权 grant read, write on directory TESTFILE to zxx; 详细介绍 http://download.oracle.com/docs

  • Python标准库之随机数 (math包、random包)介绍

    我们已经在Python运算中看到Python最基本的数学运算功能.此外,math包补充了更多的函数.当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用. 此外,random包可以用来生成随机数.随机数不仅可以用于数学用途,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性. math包 math包主要处理数学相关的运算.math包定义了两个常数: 复制代码 代码如下: math.e   # 自

  • Oracle生成随机数字、字符串、日期、验证码及 UUID的方法

    在日常生活中,随机数对于我们而言并不陌生,例如手机短信验证码就是一个随机的数字字符串:对于统计分析.机器学习等领域而言,通常也需要生成大量的随机数据用于测试.数据抽样.算法验证等.那么今天我们就来谈谈如何在 Oracle 数据库中生成随机数据.

  • MySQL与Oracle SQL语言差异比较一览

    数据类型 编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型: MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) 3 Date DATATIME 日期字段的处理 MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前

  • MySQL与Oracle差异比较之五存储过程&Function

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(    id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE) is DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`; create procedure P_ADD_FAC(        id_fac_cd  varchar(100)) 1.在创建存储过程时如

  • Oracle PL/SQL语言入门基础

    正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

  • 在Linux下安装Oracle

    正在看的ORACLE教程是:在Linux下安装Oracle. 由于Oracle自身比较复杂,在Linux环境下安装要涉及很多方面的因素.本文分两个方面介绍在Linux RedHat 6.0环境下Oracle 8.0.5的安装. 一.调整Linux核心与环境 在安装Oracle之前,应该先对RedHat 6.0的Linux内核与环境进行调整,要做以下工作: 1.在完成RedHat 6.0 Linux的缺省安装后,需要安装以下软件包. kernel -source -2.2.5 -15.1386.r

随机推荐