相关文章推荐
儒雅的核桃  ·  CellChat ...·  1 年前    · 

首先我们需要建立一个表为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;
     X:=X+1;
     insert into tb_1 select *from tb_1;
     EXIT WHEN X > 11;
   END LOOP;

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

总结不易,如有不足,恳请指导!
数据库数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万,如果一的录入,那会浪费大量的时间,本文介绍了Oracle如何通过一 SQL快速生成大量的测试数据的方法。 产生测试数据的SQL如下: 当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候,oracle需要生成 redo log和undo log;此时最好的解决办法是insert数据时, 将表设置为nologging,速度是比较快的。这个时候oracle只会生成最低限度的必须的redo log,而没有一点undo信息。如果有可能将index也删除,重建。先看看实验结果:archivelog操作类型... 当我们进行测试数据或者进行某种大数据量的时候,可以用一下语句进行大批量插入, 通过我的测试,10万数据插入时间为7秒左右,100万记录插入时间为65秒,200万插入为150秒。 我机器配置为 CPU I5 2450M 内存4G 硬盘 西部数据500G 5400转 操作系统为WIN7 64位 ,数据库ORACLE 11G 64位 插入测试工具为PL\SQL 9.0 declare i integer; --定义变量 begin i := 1; /* 插入数据 */ insert i. begin for i in 1 .. 1000000 loop INSERT INTO "DCA"."TEST_DATA" ("ID", "NAME1", "NAME2", "NA 有时候做实验测试数据用到大量数据时可以用以下方法插入:方法一:使用xmltablecreate table bqh8 as select rownum as id from xmltable('1 to 10000000');select count(*) from bqh8;-----------------------一千万数据已插入。方法二:使用dual+connect by levelc... https://www.jb51.net/article/207999.htm https://blog.csdn.net/FloraCHY/article/details/117792903 -- 进入数据库 use test; -- 显示所有表 show tables; -- 创建majors表 create table majors... 在开发过程需要测试千万级数据的获取情况,由于不能影响现有业务,没办法,只能自己先造个千万数据了。 存储过程:简单类比的话,可以看作我们的Java程序,只不过前者是在数据库运行。 存储过程声明: CREATE OR REPLACE PROCEDURE 存储过程名字 BEGIN --执行体 示例:存储过程插入千万数据 CREATE OR REPLACE PROCEDURE INSERT_USER_TES 需求:数据迁移,从远端数据库查询数据写入到生产库。遇到问题,数据量为千万级别(具体是6千多万记录的数据),直接使用insert into 目标表 select * from 数据源表。因为目标表本身有上千万数据,且有主键和索引,导致写表非常慢。执行了5,6个小时还没跑完,第二天看索性plsqldev已经卡死了。只能强行杀掉了plsqldev的进程。再看看数据,一都没写进去,有点崩溃。。。...