自己记录一下,oracle 批量造数据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;

复制上方代码块,什么都不用改,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万条数据就造好啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值