在实际工作中,数据库开发人员和管理人员经常需要构建大量的随机数据用来测试。如果手动一条一条的录入,会浪费大量的时间,本文将跟大家分享 DM 数据库中创建随机测试数据的几种方法。
假设我们需要创建一个学生成绩统计表,表结构如下:
create table test(id int,student_name varchar (20),math int,english int,science int)
在产生随机数据的过程中需要调用 DBMS_RANDOM 系统包,如未创建,则可以执行如下命令:
SP_CREATE_SYSTEM_PACKAGES (1);
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 毫秒,生成的结果如下:
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 包的应用方法。在实际工作中,我们可能对随机数据有更多的要求。
例如:
to_char(10000000000+floor(dbms_random.value(3111111111,3999999999)))
dbms_random.string('L',8)||'@'||dbms_random.string('L',5)||'.com'
类似的例子还有很多,因为篇幅原因就不继续往下举了。如果大家对这方面内容感兴趣,可以参考《DM 系统包使用手册》中 DBMS_RANDOM 的相关章节。
文章
阅读量
获赞