如何在Oracle中批量添加百万条测试数据

首先我们需要建立一个表为tb_1,在里面添加一个(或多个)字段。这里我只添加一个字段为name并添加一行数据。然后我们可以在这个表中添加百万条数据,方法如下:

一.借助Oracle中的dual表
select * from tb_1,(select level from dual connect by level <= 1000000);

其中dual表是Oracle中的一个虚拟表,用来构成select的语法规则,里面无论什么时候都只有一条记录。这个表的存在是为了方便用户在没有实际表的存在时做各种各样的操作:如查看当前用户,调用系统函数,获得当前系统时间,主机名等等,在这里就不细讲了。
而connect by level是Oracle中一组的关键字,主要是用来进行递归查询,但是也有一个特殊的用法:生成1…n序列。 在这里我们使用这个特殊用法后,能将原表复制出N份记录。
但是注意,当数据量到达449420时会强行中止,系统会报“conncet by内存上限为100MB”的错误:在这里插入图片描述

二.使用xmltable方法
select * from tb_1,(xmltable('1 to 10000'));

在Oracle 10之后开始支持XML数据格式,我们可以用xmltable来进行大量数据复制并且转化成XML数据。但是数据制造非常慢的,一般不需要大量数据复制并转化XML格式的时候,尽量避免用这个方法。结果如下:
在这里插入图片描述

三.使用循环语句+自我插入复制
DECLARE
   X number;
 BEGIN
   X:=0;
   LOOP
     X:=X+1;
     insert into tb_1 select *from tb_1;
     EXIT WHEN X > 11;
   END LOOP;
END; 

Oracle中的循环有多种方法,这里我用loop循环,进行表的自我插入,相当于只有一条数据的表自我插入后变成两条数据,二变四,四变八。。。。。当经过N次循环之后,本来表中只有一条数据,现在变成2^N条数据。
这个方法耗时少,速度快,一般要产生批量测试数据时推荐这个办法。结果如下:
在这里插入图片描述

总结不易,如有不足,恳请指导!
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Oracle批量更新功能和MyBatis来实现批量更新几万数据。 首先,你需要在MyBatis的映射文件编写一个更新语句,例如: ```xml <update id="batchUpdate" parameterType="java.util.List"> <!-- 这里是你的更新语句,使用动态SQL来处理批量更新 --> UPDATE your_table SET column1 = #{listItem.value1}, column2 = #{listItem.value2} WHERE id = #{listItem.id} </update> ``` 然后,在Java代码,你可以使用MyBatis的`SqlSession`对象来批量执行该更新语句。你需要将要更新的数据封装到一个List,然后调用`update`方法来执行批量更新,示例如下: ```java List<YourEntity> dataList = new ArrayList<>(); // 要更新的数据列表 for (int i = 0; i < dataSize; i++) { YourEntity entity = new YourEntity(); // 设置要更新的字段值 entity.setId(idList.get(i)); entity.setValue1(value1List.get(i)); entity.setValue2(value2List.get(i)); dataList.add(entity); } try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) { // 批量更新 int batchSize = 1000; // 每批次更新的数据量 int totalSize = dataList.size(); int batchCount = totalSize / batchSize + (totalSize % batchSize == 0 ? 0 : 1); for (int i = 0; i < batchCount; i++) { int fromIndex = i * batchSize; int toIndex = Math.min((i + 1) * batchSize, totalSize); List<YourEntity> batchList = dataList.subList(fromIndex, toIndex); sqlSession.update("yourMapper.batchUpdate", batchList); sqlSession.commit(); // 提交事务 sqlSession.clearCache(); // 清理缓存 } } ``` 这样就实现了批量更新几万数据的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值