Java 随机生成中文姓名,手机号,邮编,住址:http://blog.csdn.net/xiaokui_wingfly/article/details/45913885

Java 批量随机生成身份证号码:http://blog.csdn.net/xiaokui_wingfly/article/details/45893791

做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法。

首先模拟一下100条的随机数据

  1. select rownum as id,
  2. to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
  3. trunc(dbms_random.value(0, 100)) as random_id,
  4. dbms_random.string('$', 20) random_string
  5. from dual
  6. connect by level <= 100;

以上代码中并没有插入数据库中,若要插入只需要对sql上增加create table 表名 as  或 insert into 表名 select方式

上面SQL是利用了Oracle数据库语法的几个实用小技巧实现的:
1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
2、利用rownum虚拟列生成递增的整数数据;
3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。

dbms_random.函数中的参数介绍

    1. -- ****************************************  随机数字  ***************************************************
    2. select decode(trunc(dbms_random.value(0, 2)),'0','女','1','男') from dual
    3. select length(dbms_random.random) from dual;  -- 产生一个任意长度为9,10,11位的数字
    4. select abs(mod(dbms_random.random,100)) from dual;  -- 产生一个100以内的随机数
    5. select trunc(10+90*dbms_random.value) from dual;  -- 产生10~100之间的任意2位随机整数(包含10,不包含100)
    6. select dbms_random.value from dual;   -- 产生一个大于0小于1的随机数小数(小数点后37或38位长度)
    7. select dbms_random.value(10,20) from dual;   -- 产生一个大于10小于20的随机数小数(小数点后38位)
    8. select dbms_random.normal from dual;  -- normal函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
    9. -- ****************************************  随机日期  ***************************************************
    10. select to_date(trunc(dbms_random.value(to_number(to_char(sysdate-10, 'J')), to_number(to_char(sysdate, 'J')))), 'J') from dual;  -- 在过去10天内取随机日期
    11. select (sysdate - 1 / 24 / 60 * 30) + dbms_random.value (1, 1800) / 3600 / 24 from dual;    -- 在过去30分钟内取随机时间
    12. select to_date(to_char(to_date('2015-01-01', 'yyyy-MM-dd'), 'J') + trunc(DBMS_RANDOM.VALUE(0, 365)), 'J') from dual;   -- 查询2015年中的任意日期
    13. -- 在指定日期范围内取随机时间
    14. select to_date(trunc(dbms_random.value(to_number(to_char(to_date('20150501', 'yyyymmdd'),'J')),
    15. to_number(to_char(to_date('20150531', 'yyyymmdd') + 1, 'J')))
    16. ), 'J') + dbms_random.value(1, 3600) / 3600 prize_time
    17. from dual;
    18. -- 从现在开始到过去的100年之间的任意时刻
    19. select to_date(trunc(dbms_random.value(
    20. to_number(to_char(add_months(sysdate,-100 * 12),'J')),
    21. to_number(to_char(sysdate + 1, 'J')))
    22. ), 'J') + dbms_random.value(1, 3600) / 3600 from dual;
    23. -- ****************************************  随机字符(产生任意长度为20的字符串)  ***************************************************
    24. select dbms_random.string('u', 20) from dual  -- 'u', 'U' 返回全是大写的字符串(uppercase) 测算发现,只要参数不是一个中文或全角字符,返回数据均是大写
    25. select dbms_random.string('l', 20) from dual  -- 'l', 'L' - 返回全是小写的字符串(lowercase)
    26. select dbms_random.string('a', 20) from dual  -- 'a', 'A' - 返回大小写结合的字符串(mixed case)
    27. select dbms_random.string('x', 20) from dual  -- 'x', 'X' - 返回全是大写和数字的字符串(uppercase,alpha&numeric)
    28. select dbms_random.string('p', 20) from dual  -- 'p', 'P' - 返回键盘上出现字符的随机组合(any printable char)
    29. 那要生成10万条测试记录表可以用如下SQL:
      create table myTestTable as 
      select rownum as id,
                     to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
                     trunc(dbms_random.value(0, 100)) as random_id,
                     dbms_random.string('x', 20) random_string
                from dual
              connect by level <= 100000;
    30. DBMS_RANDOM.STRING用法:

      1)选项'u', 'U' - returning string in uppercase alpha characters
      2)选项'l', 'L' - returning string in lowercase alpha characters
      3)选项'a', 'A' - returning string in mixed case alpha characters
      4)选项'x', 'X' - returning string in uppercase alpha-numeric characters
      5)选项'p', 'P' - returning string in any printable characters.
      6)选项 Otherwise the returning string is in uppercase alpha characters.

      例子:

      生成由大写字母和数字组成的8位密码

      sys@ora11g>select dbms_random.string('x',8) "x_8_password" from dual;

      x_8_password

      ----------------------------------------------

      TT3ISGUV

[转]Oracle dbms_random函数用法快速生成多条测试数据的更多相关文章

  1. MySQL快速生成100W条测试数据

    https://blog.csdn.net/qq_16946803/article/details/81870174 1.生成思路利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生 ...

  2. mysql 快速生成百万条测试数据

    1.生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 2.创建内存表及普通表 CREATE TABLE `vote_record_me ...

  3. oracle中使用sql语句生成10w条测试数据

    sql语句 create table AAAATest as select rownum as cardNo, 'test' creator, to_char(sysdate + rownum//, ...

  4. Oracle ltrim() 函数用法

    Oracle ltrim() 函数用法 2015-03-21 20:42:40 Je_WangZhe 阅读数 8834更多 分类专栏: Oracle   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  5. 快速生成100W条数据

    快速生成100W条数据,生成的时候是顺序生成,取的时候是随机取用,生成100W条数据大概一分多钟,比网上其他代码速度要快很多 )) --truncate table tb --select top 1 ...

  6. oracle trim函数用法详解

    在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数 ...

  7. [转载]Oracle ltrim() 函数用法

    前面有说到过LPAD和RPAD这两个函数用法的文章,今天发现与之相反意义的另外两个函数,那就是LTRIM() RTRIM(). 这次就挑LTRIM() 这一函数来讲讲: 具体的语法格式如下: LTRI ...

  8. Oracle单行函数用法

    单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数. 1.字符函数: 对于输入的字符转换为需要转为的字符或数值. upper()大写 --小写字母转为大写字母 --对于表指定的字符 ...

  9. oracle decode函数用法

    DECODE函数是ORACLE PL/SQL是功能强大的函数之中的一个,眼下还仅仅有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一 ...

随机推荐

  1. Windows Store GIF player 诞生记

    在Win8上面,Image source切换的时候有bug.当我们短时间定时切换的时候,Image不能正常地显示对应的图片.Image控件又不支持GIF播放,所以GIF图片的播放就是一个非常头痛的问题 ...

  2. oracle 存储过程 返回结果集

      oracle 存储过程 返回结果集 CreationTime--2018年8月14日09点50分 Author:Marydon 1.情景展示 oracle存储过程如何返回结果集 2.解决方案 最简 ...

  3. 【Oracle】Oracle常用语句集合

    表相关 1.快速统计大表记录数 select table_name, t.num_rows, t.last_analyzed  from tabs t WHERE table_name='TABLE_ ...

  4. [Done]ibatis/mybatis: java.lang.NoSuchMethodException

    异常描述: Caused by: org.apache.ibatis.reflection.ReflectionException: Error instantiating interface cn. ...

  5. Tomcat 改服务器编码(Java 修改字符串编码格式)

    对于客户端发来的汉字,我们一般需要转码: ------------------------------------------------------------------------------- ...

  6. (二)hibernate进阶

    1.hibernate.cfg.xml常用配置以上节代码为例 <session-factory> <property name="connection.username&q ...

  7. IHttpHandler的那些事

    写在前面 从上家公司离职,在家休息,闲着无聊,觉得还是有必要将IHttpHanlder的内容,做一个总结.发现在写demo的过程中,总觉得有点生疏了,项目中很少使用自定义的类来实现该接口.当然,一般处 ...

  8. struts2 转发、重定向概述

    转发等参数传递的注解方式: @Action(value = "operatorRoleAction", results = { @Result(name = "view& ...

  9. windows下MongoDB的安装,配置与开机自启动

    关于简介不多说百度去吧少年.. MongoDB详细安装: 1.进入官网,点击DOWNLOAD MONGODB,下载所需要的版本.. 我这里把下载的文件放在d\MongoDB文件夹下,点击下载的官方镜像 ...

  10. JavaScript 中 this 的用法

    在 JavaScript 中,this 是动态绑定,或称为运行期绑定的.一般而言,在Javascript中,this 指向函数执行时的当前对象. 由于其运行期绑定的特性,JavaScript 中的 t ...