oracle中使用DBMS_RANDOM去产生随机数

在测试过程中,经常要产生一些随机数,为此,oracle提供了DBMS_RANDOM 
这个包去产生随机数挺好用的。下面小结下:

这个包有initialize()、seed()、terminate()、value()、normal()、random()、string()等几个函数 
1)dbms_random.value 
   没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0, 
比如: 
for i in 1..10 loop 
     dbms_output.put_line(round(dbms_random.value*100)); 
     end loop;

如果带有上下限的,比如: 
dbms_random.value(1,101) 则生成的为:将会生成下限到上限之间的数字,但不包含上限

2) dbms_random.string方法

Delect dbms_random.string(‘P‘,4 ) from dual ; 
第一个参数含义如下 
  u‘, ‘U‘ - 返回大写字母 
  ‘l‘, ‘L‘ - 返回小写字母 
‘a‘, ‘A‘ - 返回大小写混合字母 
‘x‘, ‘X‘ - 大小写字母+数字混合 
‘p‘, ‘P‘ - 
P 表示 printable,即字符串由任意可打印字符构成 
而第二个参数表示返回的字符串长度。

3) dbms_random.normal 
  NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。

4)dbms_random.random 方法 
   random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数 
  与dbms_random.value 的区别举例: 
   Order By dbms_random.value; 
这条语句功能是实现记录的随机排序 
另外: 
dbms_random.value 和 
dbms_random.random 两者之间有什么区别? 
1。Order By dbms_random.value ,为结果集的每一行计算一个随机数,dbms_random.value 是结果集的一个列(虽然这个列并不在select list 中),然后根据该列排序,得到的顺序自然就是随机的啦。 
2。看看desc信息便知道vlue和random这两个函数的区别了,value返回的是number类型,并且返回的值介于1和0之间,而random返回的是BINARY_INTEGER类型

5)生成随机日期 
   Oracle将日期作为过去某个关键日期(如果你好奇的话,我可以告诉你这个日期是公元前4712年1月1日)的整数偏移量来保存。这就意味着你可以通过寻找与你希望的起始日期相对应的整数,然后向它加入一个随机的整数来随机生成一个指定范围内的日期。

使用TO_CHAR函数和‘J’格式代码,你可以为今天的日期生成一个内部日期数:

SELECT TO_CHAR(SYSDATE, ‘J‘) FROM DUAL;

例如,要生成一个2012年内的任意日期,你可以首先确定2012年1月1日的日期整数;

SELECT TO_CHAR(TO_DATE(‘01/01/12‘,‘mm/dd/yy‘),‘J‘)FROM DUAL;

系统给的结果是2455928。所以要生成该年度内的任意日期,我们就要用带有low_value等于2455928和high_value等于2455928+365参数的DBMS_RANDOM.VALUE,再把它转换成日期:

SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2455928,2455928+365)),‘J‘) FROM DUAL;

6) 来个综合的例子: 
  SELECT     LEVEL                                                       empl_id, 
           MOD (ROWNUM, 50000)                                         dept_id, 
           TRUNC (DBMS_RANDOM.VALUE (1000, 500000), 2)                 salary, 
           DECODE (ROUND (DBMS_RANDOM.VALUE (1, 2)), 1, ‘M‘, 2, ‘F‘)   gender, 
           TO_DATE (   ROUND (DBMS_RANDOM.VALUE (1, 28)) 
                    || ‘-‘ 
                    || ROUND (DBMS_RANDOM.VALUE (1, 12)) 
                    || ‘-‘ 
                    || ROUND (DBMS_RANDOM.VALUE (1900, 2010)), 
                    ‘DD-MM-YYYY‘ 
                   )                                                   dob, 
           DBMS_RANDOM.STRING (‘x‘, DBMS_RANDOM.VALUE (20, 50))        address 
      FROM DUAL 
CONNECT BY LEVEL < 10000;

原文地址:https://www.cnblogs.com/obsession-with-the-young-monk/p/9019525.html

时间: 2024-10-01 07:43:05

oracle中使用DBMS_RANDOM去产生随机数的相关文章

Oracle中生成随机数的函数(转载)

在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产生一个介于0和1之间(不包含0和1)的38位精度的随机数,语法为: DBMS_RANDOM.VALUE RETURN NUMBER; 这种用法不包含参数. 2. 产生一个介于指定范围之内的38位精度的随机数,语法为: DBMS_RANDOM.VALUE(low IN NUMBER,high IN N

oracle系统包——dbms_random用法及order by 小结(转)

dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().string()等几个函数,但value()是最常用的,下面依次介绍各个函数的详细用法: 1.dbms_random.value方法 第一种:FUNCTION value RETURN NUMBER; 说明: 这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0. 示例: S

【转】Oracle中dual表的用途介绍

原文:Oracle中dual表的用途介绍 [导读]dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情. dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual; 2.用来调用系统函数 select to_char(sysdate,'yyyy-mm

oracle中的创建过程,函数,包

一.创建存储过程 存储过程是在oracle中存取完成特定业务逻辑的代码块.存储过程是命名块,匿名块不存在数据库中,命名块会存储到数据库中,匿名块每次运行都需要提前编译,命名块一次存储,只会编译一次.命名块可以多次使用. 创建存储过程的语法: create [or replace] procedure 存储过程的名称(参数名[in/out/inout] 参数类型,参数名...)] is/as 变量声明部分 begin 业务逻辑处理部分 exception 异常处理部分 end; 注意: 1.存储过

【转】oracle 中随机取数据的方法

oracle 中随机取数据的方法: 1.快速随机取数据(推荐使用): select * from MEMBER sample(1) where rownum <= 10 2.随机取数据,较慢 select * from (  select * from MEMBER order by dbms_random.value) where rownum<=10 ========原文======== 最近在做系统时用到了随机抽取记录的问题: 上网上查找了很多相关资料,发现了不同的方法及其差异.都是基于

java实现调用ORACLE中的游标和包

今天把oracle中的包和游标学习了下,不废话,网上的的有些代码是错误的,抄来抄去,就自己实践了下,做个记录.直接上图,上代码 通过plsql创建自己的的包,包分为包头和包体. 1.包头如下: 1 CREATE OR REPLACE PACKAGE JAVALINKTEST 2 IS 3 TYPE CURSOR_TYPE IS REF CURSOR; --定义游标 4 PROCEDURE TEST_CURSOR(INPUT STRING, CURSOR_BACK OUT CURSOR_TYPE)

转:Oracle中的rownum不能使用大于&gt;的问题

一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.<=.!=”, 并非说用“>.>=.=.between..and”时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来. 其实,只要理解好了这个 rownum 伪列的意义就不应该感到惊奇. rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的: r

浅谈oracle中rowid和rownum

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

oracle中110个常用函数介绍

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --