简易版
适合对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;
复制上方代码块,什么都不用改,10万条的测试记录表就生成了
逐条解析:
create table myTestTable as
创建表,表名为 myTestTable
第二行
rownum as id
rownum:☞虚拟列,生成递增的整数数据,把rownum赋值给id,id的值就是1 2 3 4…
第三行
to_char(sysdate + rownum/24/3600, ‘yyyy-mm-dd hh24:mi:ss’) as inc_datetime,
sysdate函数:☞加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒,再用to_char()转一下格式,最后把值复制给inc_datetime
第四行
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.value函数:☞生成随机的数值型数据,本例中就是生成0到100的随机数值
trunc函数:截断,trunc(number,num_digits)表示截断数字,num_digits默认值为0,就是不带小数位,本例中就是只取整数位
这两个函数整合在一起就是生成0到100之间的随机整数,最后复制给random_id
第五行
dbms_random.string(‘x’, 20) random_string
dbms_random.string函数:☞生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。最后把值复给random_string
from dual
dual:☞oracle的伪表,因为select 需要对象,用伪表dual来满足格式需要
connect by level <= 100000;
connect by:☞树形连接语法生成测试记录,level <= 100000表示要生成10万条记录
效果如下▼
带需求版
适合实际项目环境
先建个表
create table CUST_INFO
(
CUST_ID VARCHAR(36) not null,
CUST_TYPE VARCHAR(50),
CUST_NAME VARCHAR(200),
ID_NO VARCHAR(20),
ADDE VARCHAR(20),
constraint P_ID primary key (CUST_ID)
);
comment on column CUST_INFO.CUST_ID is '客户编号';
comment on column CUST_INFO.CUST_TYPE is '客户类型';
comment on column CUST_INFO.CUST_NAME is '客户名称';
comment on column CUST_INFO.ID_NO is '证件号码';
comment on column CUST_INFO.ADDE is '地址';
然后开始造数据
declare
i number;
begin
for i in 1..50001 loop
if i < 50001 then
if i < 40000 then
if i < 30000 then
if i < 20000 then
if i < 10000 then --1 ~~ 9999
insert into CUST_INFO values (i||'', 'A类', '张'||i, '3231281199'||i, '南京');
else --10000 ~~ 19999
insert into CUST_INFO values (i||'', 'B类', '李'||i, '305316644'||i, '苏州');
end if;
else --20000 ~~ 29999
insert into CUST_INFO values (i||'', 'C类', '王'||i, '319854411'||i, '泰州');
end if;
else --30000 ~~ 39999
insert into CUST_INFO values (i||'', 'D类', '金'||i, '350854411'||i, '扬州');
end if;
else --40000 ~~ 50000
insert into CUST_INFO values (i||'', 'E类', '孙'||i, '334854411'||i, '盐城');
end if;
end if;
end loop;
end;
这个代码就比较好懂啦,没有添加函数,主要是需求循环遍历1~50001
造5万条数据,全程if…else,首先
遍历1~~9999的数据:▼
i值为主键;
客户类型(CUST_TYPE)的值为A类;
客户名称(CUST_NAME)的值都姓张;
证件号码(ID_NO)都以’3231281199’开头;
地址(ADDE)都是南京;
遍历10000 ~ ~19999的数据:▼
i值为主键;
客户类型(CUST_TYPE)的值为B类;
客户名称(CUST_NAME)的值都姓李;
证件号码(ID_NO)都以’3231281199’开头;
地址(ADDE)都是南京;
遍历20000 ~~ 29999的数据:▼
i值为主键;
客户类型(CUST_TYPE)的值为C类;
客户名称(CUST_NAME)的值都姓王;
证件号码(ID_NO)都以’319854411’开头;
地址(ADDE)都是泰州;
遍历30000 ~ 39999的数据:▼
i值为主键;
客户类型(CUST_TYPE)的值为D类;
客户名称(CUST_NAME)的值都姓金;
证件号码(ID_NO)都以’350854411’开头;
地址(ADDE)都是扬州;
遍历40000 ~ 50000的数据:▼
i值为主键;
客户类型(CUST_TYPE)的值为E类;
客户名称(CUST_NAME)的值都姓孙;
证件号码(ID_NO)都以’334854411’开头;
地址(ADDE)都是盐城;
效果如下▼
5万条数据就造好啦~