注册
DM 中生成随机数据的几种方法
专栏/金的探索记录/ 文章详情 /

DM 中生成随机数据的几种方法

2021/01/15 3664 2 0
摘要 DM 中生成随机数据的几种方法

在实际工作中,数据库开发人员和管理人员经常需要构建大量的随机数据用来测试。如果手动一条一条的录入,会浪费大量的时间,本文将跟大家分享 DM 数据库中创建随机测试数据的几种方法。

构建测试用表

假设我们需要创建一个学生成绩统计表,表结构如下:

create table test(id int,student_name varchar (20),math int,english int,science int)

检查系统包的状态

在产生随机数据的过程中需要调用 DBMS_RANDOM 系统包,如未创建,则可以执行如下命令:

SP_CREATE_SYSTEM_PACKAGES (1);

使用单条SQL语句构建测试数据

insert into test select rownum as id, dbms_random.string('1', trunc(dbms_random.value(3, 8))), trunc(dbms_random.value(0, 100)), trunc(dbms_random.value(0, 100)), trunc(dbms_random.value(0, 100)) from dual connect by level <= 10000; commit

这里有几点需要注意:

  • 利用了 connect by 语句来生成测试记录,level<=10000 表示生成 10000 条数据;

  • 利用了 rownum 虚拟列来生成递增数据;

  • 利用了 dbms_random 包中的 value 方法和 string 方法。

Value 方法用来生成随机数值,为了模拟考试分数,采用了 0 到 100 间的整数。

String 方法用来生成随机字符串,这里提供了3到8位的随机小写字符串来模拟姓名。

执行耗时 166 毫秒,生成的结果如下:

1.png

使用存储过程来构建测试数据

CREATE OR replace PROCEDURE "SYSDBA"."PROC"(num int) AS DECLARE id int ; BEGIN id:1 ; while id <= num loop insert into test values(id, dbms_random.string('1',trunc(dbms_random.value(3, 8))), trunc(dbms_random.value(0, 100)), trunc(dbms_random.value(0, 100)), trunc(dbms_random.value(0, 100))); id:=id+1; end loop; END

这里利用了 DM PL/SQL 中的循环来实现了类似的产生随机数据的操作,传入参数 num 来控制执行的遍数,执行的时候只用调用本过程即可。

call PROC(10000);

可以得到跟刚才类似的数据。

一些补充

刚才的例子中,我们简单的举了几个 Random 包的应用方法。在实际工作中,我们可能对随机数据有更多的要求。

例如:

  • 随机产生 13 开头的 11 位数字手机号,可以用以下命令:
to_char(10000000000+floor(dbms_random.value(3111111111,3999999999)))
  • 如果想得到随机的邮箱字符串,可以用以下命令:
dbms_random.string('L',8)||'@'||dbms_random.string('L',5)||'.com'

类似的例子还有很多,因为篇幅原因就不继续往下举了。如果大家对这方面内容感兴趣,可以参考《DM 系统包使用手册》中 DBMS_RANDOM 的相关章节。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服