`
guochongcan
  • 浏览: 326885 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ORACLE 如何产生一个随机数

阅读更多
http://blog.csdn.net/jie8991/article/details/5327145


ORACLE 如何产生一个随机数
ORACLE 如何产生一个随机数:DBMS_RANDOM
--1、小数( 0 ~ 1)

     select dbms_random.value from dual ;

--2、指定范围内的小数 ( 0 ~ 100 )
     select dbms_random.value(0,100) from dual ;


--3、指定范围内的整数 ( 0 ~ 100 )

     select trunc(dbms_random.value(0,100)) from dual ;

--4、长度为20的随机数字串

     select substr(cast(dbms_random.value as varchar2(38)),0,10) from dual ;

--5、正态分布的随机数

     select dbms_random.normal from dual ;

--6、随机字符串

     select dbms_random.string('x', 3) from dual ;

     /* opt可取值如下:
      'u','U'    :    大写字母
      'l','L'    :    小写字母
      'a','A'    :    大、小写字母
      'x','X'    :    数字、大写字母
      'p','P'    :    可打印字符*/

--7、随机日期

     select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual ;

   /* 通过下面的语句获得指定日期的基数*/

     select to_char(sysdate,'J') from dual ;

--8、生成GUID

     select sys_guid() from dual ;

--生成带分隔符(-)的GUID的自定义函数
--create or replace function my_guid
return varchar2
is
    guid varchar(36);
    temp varchar(32);
begin
    temp:=sys_guid();
    guid:= substr(temp,1,8) || '-'
         ||substr(temp,9,4) || '-'
         ||substr(temp,13,4)|| '-'
         ||substr(temp,17,4)|| '-'
         ||substr(temp,21,12);
    return guid;
end;

1.准备工作

login sqlplus as sys
then run the script
$ORACLE_HOME/RDBMS/ADMIN/dbmsrand.sql

2.应用举例

SELECT DBMS_RANDOM.RANDOM FROM DUAL;

再进一步的要求,比如,产生一个0-100的随机数,稍微变通一下就可以了:

select abs(mod(dbms_random.random,100)) from dual

3.进阶说明

dbms_random又有新函数了可以实现这些功能
FUNCTION value RETURN NUMBER;
FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
FUNCTION normal RETURN NUMBER;
FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;

产生N到M之间的随机数
SELECT DBMS_RANDOM.VALUE(N,M) FROM DUAL;

缺省DBMS_RANDOM.VALUE返回0到1之间的随机数

NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
最后,是STRING函数。它返回一个长度达60个字符的随机字符串。

用DBMS_RANDOM生成文本和日期值

作者: Bob Watkins
2006-06-09 04:51 PM

数字、文本字符串和日期都是用户会在表格里碰到的三种常见数据类型。虽然你可以用PL/SQL程序包里的DBMS_RANDOM随机生成数字——它确实能够做到这一点——它还能够随机生成文本和日期值。

1.产生随机数字
就让我们先从数字开始。VALUE函数会返回一个大于等于0但是小于1的数,精度是38位。

SELECT DBMS_RANDOM.VALUE FROM DUAL;

对于指定范围内的整数,要加入参数low_value和high_value,并从结果中截取小数(最大值不能被作为可能的值)。所以对于0到99之间的整数,你要使用下面的代码:

SELECT TRUNC(DBMS_RANDOM.VALUE(0, 100)) FROM DUAL;

2.产生随机文本字符串
要随机生成文本字符串,就要使用STRING函数并编写代码指定字符串的类型和所希望的长度:

SELECT DBMS_RANDOM.STRING('A', 20) FROM DUAL;

类型代码在《Oracle Database 10g PL/SQL程序包和类型参考(Oracle Database 10g PL/SQL Packages and Types Reference)》有说明。

下面是一些类型的代码:

‘U’用来生成大写字符

‘L’用来生成小写字符

‘A’用来生成大小写混合的字符

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

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

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

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

SELECT TO_CHAR(TO_DATE('01/01/03','mm/dd/yy'),'J')FROM DUAL;

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



SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J') FROM DUAL;

列表A:

SQL> CREATE TABLE random_stuff (
2     id   NUMBER,
3     date1 DATE,
4     text1 VARCHAR2(40)
5     );

Table created.

SQL> INSERT INTO random_stuff
2     SELECT
3        ROWNUM,
4        TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J'),
5        DBMS_RANDOM.STRING('A',TRUNC(DBMS_RANDOM.VALUE(6,41)))
6     FROM user_objects
7     WHERE ROWNUM < 101;

100 rows created.

SQL> commit;

Commit complete.

SQL> SELECT *
2 FROM random_stuff
3 WHERE ROWNUM < 11;

        ID DATE1     TEXT1                                                    
---------- --------- ----------------------------------------                 
         1 21-JAN-03 gAwQdhHSLBnu                                             
         2 28-SEP-03 cESSyTtblabklMGznSHj                                     
         3 22-NOV-03 nrnsGZCniTY                                              
         4 05-FEB-03 WCrFojHkic                                               
         5 10-SEP-03 vlSliCaNQxZsBHbvKfiGnEMoXarR                             
         6 13-JUN-03 UnYLsIFOvkVezXJTByOpqVgwVSLKDFvvApIR                     
         7 02-JAN-03 WXffJhdxXN                                               
         8 03-OCT-03 QimEpqGkVvNBJvZdwzegqgeYXUSEKJE                          
         9 14-JUL-03 pJlmGZeNNIfSEJFgIdNuRKnCFIzzLMOlXmvC                     
        10 24-DEC-03 JNnLJlndDcv                                             

10 rows selected.列表A把上面的代码集中到了一起。它创建了一个叫做random_stuff的示例表格,这个表格有三个数据列:ID、date1和text1。它然后联合使用 ROWNUM和DBMS_RANDOM生成数据,在里面插入100个数据行。你可以使用任意至少带有100个数据行的表格进行子查询,因为真正表格里的数据列都不在SELECT列表里。
分享到:
评论

相关推荐

    Oracle中如何生成随机数字、随机字符串、随机日期

    Oracle中如何生成随机数字、随机字符串、随机日期 详细实例脚本。

    ORACLE随机数DBMS_RANDOM包

    Oracle数据库中的DBMS_RANDOM包是一个非常实用的工具,它提供了多种生成随机数和随机字符串的方法,广泛应用于数据填充、测试场景模拟以及各种需要随机性的应用中。以下将详细讲解DBMS_RANDOM包中的主要函数和其使用...

    Oracle中如何用一条SQL快速生成10万条测试数据.txt

    `ROWNUM`是Oracle中的一个伪列,它为每一行返回一个唯一的行号。在这个场景下,我们将`ROWNUM`用作新表中的唯一标识符(`ID`)。 #### 3. 生成递增日期时间字段 为了模拟真实场景中的日期时间数据,我们使用`...

    Oracle经典SQL语句

    ORACLE经典语句汇总 -- 字符串左填充和右填充,默认填充空格 ...-- 把SELECT出来的结果导到一个文本文件中 -- 查询新建用户 -- 查询那些用户,操纵了那些表造成了锁机 --看锁阻塞的方法 --ORACLE获得系统信息

    higherorlowerGame:这是一个会产生随机数并让用户猜测的游戏

    在这个游戏中,计算机生成一个随机数,然后用户需要猜测这个数字是更高还是更低。下面将详细讨论这个游戏的实现,主要聚焦于使用Java编程语言进行开发。 首先,我们要了解Java语言的基础。Java是一种面向对象的、跨...

    随机生成汉字(控制台下)

    1. **生成区码**:在0x81到0xFE之间随机选择一个值作为区码。可以使用C#等语言的Random类生成随机数,并将其转换为对应的十六进制值。 2. **生成位码**:同样,我们需要在0x40到0xFE之间随机生成一个位码。同样的...

    Oracle应用常见傻瓜问题 1000问

    Oracle提供了一个内置的随机数生成函数`DBMS_RANDOM.RANDOM`,用于生成随机数。例如: ```sql SELECT DBMS_RANDOM.RANDOM AS random_number FROM dual; ``` #### 33. Linux下查询磁盘竞争状况命令? 在Linux下,...

    10随机产生一个从0-100之间的整数,判断是否是质数.docx

    1. **主函数**:`main`方法作为程序的入口点,创建了一个`Random`对象,并生成了一个随机数,然后调用`isPrime`方法判断该数是否为质数并打印结果。 2. **质数判断方法**:`isPrime`方法实现了上述提到的质数判断...

    Oracle大数据量数据生成器

    Oracle大数据量数据生成器,Data_Generator,是一个实用工具,用于快速生成大量模拟真实的数据,这对于测试数据库性能、填充示例数据库或者进行数据仓库建模非常有用。在Oracle环境中,生成大量的测试数据可以帮助...

    数据库中要产生随机整数的方法

    如果需要一次性生成多行随机数,可以将上述SQL语句嵌入到一个SELECT语句中,配合其他表或使用WITH语句生成虚拟表。 8. **随机选择特定数量的记录**: 结合ORDER BY RAND()或ORDER BY RANDOM()(根据数据库类型)...

    java基础笔记

    产生一个随机数是指使用随机数生成器生成一个随机数字。 8. 猜拳游戏 猜拳游戏是指使用随机数生成器生成一个随机数字,用于模拟猜拳游戏。 9. while 循环 while 循环是一种循环结构,用于重复执行某个操作直到...

    一种基于SQL的元组集随机抽取算法.pdf

    由于在SQL语句中,调用一次伪随机函数只能得到一个随机数,因此需要对伪随机函数进行相应的扩展,使其能够生成多个随机数。具体做法可以通过线性记录编号来进行改造。具体的技术细节未在摘要中提及,但算法的构建...

    sql主键产生器

    "SQL主键产生器"就是这样一个工具,它能帮助我们在创建或更新表时自动为主键字段生成唯一值。 SQL主键产生器通常有以下几种实现方式: 1. **序列(Sequences)**:在某些数据库系统如Oracle中,可以创建序列对象来...

    随机生成牌和洗牌问题

    - **实现方式**:初始化一个数组存储已抽取的牌,每次随机选择一个位置并将该位置的牌添加到玩家手中。 **示例代码片段**: ```cpp int data[54], hand[21]; // 假设每手牌最多21张 int test = 54, t = 0; for(int...

    Datafactory工具介绍

    DataFactory 工具介绍 DataFactory 是一款强大的数据构造工具,支持 DB2、Oracle、Sybase、SQL Server 等...DataFactory 是一个强大的数据构造工具,可以快速制造多张表的百万行有意义的测试数据,满足测试的需求。

    JAVA课程大作业

    【JAVA课程大作业】是一个基于Java编程语言的项目,旨在教授和锻炼学生对Java基础知识的掌握,特别是面向对象编程和GUI(图形用户界面)设计。这个大作业要求创建一个游戏,游戏规则类似于经典的火柴游戏:系统随机...

    Tomcat重启后,首次访问很慢.md

    - `/dev/urandom` 是一个非阻塞随机数生成器,它重复使用熵池中的数据以产生伪随机数据。虽然其生成的随机数据质量略低于`/dev/random`,但由于是非阻塞式的,因此在性能方面表现更佳。 2. **JDK Bug** - 即使...

    本项目基于RuoYi进行搭建,在若依基础上进行功能构建、数据连接

    该项目基于RuoYi框架构建,RuoYi是一个开源的Java快速开发平台,旨在简化企业级应用的开发过程。通过使用RuoYi,开发者可以快速构建出稳定且高效的应用系统。在这个风电场监控项目中,我们看到RuoYi被用作基础架构,...

    jdk1.8 64位官方正式版 jdk-8u45-linux-x64.tar.gz

    例如,`java.util.Function`接口代表了一个接受一个输入参数并产生一个输出的函数。 在类型推断方面,Java 8的改进使得编译器可以更智能地推断局部变量的类型,从而减少了显式的类型声明。这在使用Lambda表达式时...

    SQL最佳实践

    CONNECT_BY是Oracle提供的一个强大工具,用于执行层次查询。通过定义父节点和子节点之间的关系,可以轻松地构建出树形结构的数据。 - **Oracle用法**:使用`CONNECT BY PRIOR`子句来指定层次关系。 - **CONNECT_BY...

Global site tag (gtag.js) - Google Analytics