如何使用交叉连接将 100 万条记录插入 table 数据库 Oracle
How to insert 1 million records into table database Oracle using cross join
我想在 Oracle 数据库中插入一百万条记录 table。我在 mysql 中使用交叉连接完成了类似的任务,如下所示:
1)先插入10条记录
insert into spltest_sampleapl2 values (10001, 'aaaa');
insert into spltest_sampleapl2 values (10002, 'bbbbb');
insert into spltest_sampleapl2 values (10003, 'ccccc');
insert into spltest_sampleapl2 values (10004, 'dddddd');
insert into spltest_sampleapl2 values (10005, 'eeeeeeeee');
insert into spltest_sampleapl2 values (10006, 'ffffff');
insert into spltest_sampleapl2 values (10007, 'gggggggg');
insert into spltest_sampleapl2 values (10008, 'hhhhhh');
insert into spltest_sampleapl2 values (10009, 'iiiiii');
insert into spltest_sampleapl2 values (10010, 'jjjjjj');
commit;
2) 使用用户变量
set @num := 10010;
3) 使用单连接插入记录
insert into apl2 (id, data) select (@num := @num + 1) ,s1.data from apl2 s1, apl2 s2, apl2 s3, apl2 s4,apl2 s5, apl2 s6;
commit;
现在我想对 Oracle 中的类似模式执行相同的操作。怎么做?
设置一个序列并将其用于自动编号:
create sequence seq_apl2;
insert into apl2(id, data)
select seq_apl2.nextval, s1.data
from apl2 s1 cross join apl2 s2 cross join
apl2 s3 cross join apl2 s4 cross join
apl2 s5 cross join apl2 s6;
编辑:
如果你没有使用序列的能力,那就使用row_number()
:
insert into apl2(id, data)
select row_number() over (order by NULL), s1.data
from apl2 s1 cross join apl2 s2 cross join
apl2 s3 cross join apl2 s4 cross join
apl2 s5 cross join apl2 s6;
您可以根据需要添加偏移量。
创建一个包含 10 条记录的 table,编号为 0 到 10:
INSERT INTO t (n) VALUES (0);
INSERT INTO t (n) VALUES (1);
...
INSERT INTO t (n) VALUES (9);
现在 select
交叉连接,使用任意多的别名 10^n 计数:
对于 100 条记录:
INSERT INTO X
SELECT t2.n*10 + t1.n FROM t t1, t t2
对于 1000 条记录:
INSERT INTO X
SELECT t3.n*100 + t2.n*10 + t1.n FROM t t1, t t2, t t3
对于 1,000,000 条记录:
INSERT INTO X
SELECT t6.n*100000 + t5.n * 10000 + t4.n*1000 + t3.n*100 + t2.n*10 + t1.n FROM t t1, t t2, t t3
我很确定这是可以在任何平台上运行的香草 SQL...
首先我插入了 ID 从 1000000 到 1000010 的记录(10 条记录),然后我使用了以下命令。
insert into apl2(id, data) select rownum ,s1.data from apl2 s1, apl2 s2, apl2 s3, apl2 s4, apl2 s5, apl2 s6 where rownum < 1000001;
我想在 Oracle 数据库中插入一百万条记录 table。我在 mysql 中使用交叉连接完成了类似的任务,如下所示:
1)先插入10条记录
insert into spltest_sampleapl2 values (10001, 'aaaa');
insert into spltest_sampleapl2 values (10002, 'bbbbb');
insert into spltest_sampleapl2 values (10003, 'ccccc');
insert into spltest_sampleapl2 values (10004, 'dddddd');
insert into spltest_sampleapl2 values (10005, 'eeeeeeeee');
insert into spltest_sampleapl2 values (10006, 'ffffff');
insert into spltest_sampleapl2 values (10007, 'gggggggg');
insert into spltest_sampleapl2 values (10008, 'hhhhhh');
insert into spltest_sampleapl2 values (10009, 'iiiiii');
insert into spltest_sampleapl2 values (10010, 'jjjjjj');
commit;
2) 使用用户变量
set @num := 10010;
3) 使用单连接插入记录
insert into apl2 (id, data) select (@num := @num + 1) ,s1.data from apl2 s1, apl2 s2, apl2 s3, apl2 s4,apl2 s5, apl2 s6;
commit;
现在我想对 Oracle 中的类似模式执行相同的操作。怎么做?
设置一个序列并将其用于自动编号:
create sequence seq_apl2;
insert into apl2(id, data)
select seq_apl2.nextval, s1.data
from apl2 s1 cross join apl2 s2 cross join
apl2 s3 cross join apl2 s4 cross join
apl2 s5 cross join apl2 s6;
编辑:
如果你没有使用序列的能力,那就使用row_number()
:
insert into apl2(id, data)
select row_number() over (order by NULL), s1.data
from apl2 s1 cross join apl2 s2 cross join
apl2 s3 cross join apl2 s4 cross join
apl2 s5 cross join apl2 s6;
您可以根据需要添加偏移量。
创建一个包含 10 条记录的 table,编号为 0 到 10:
INSERT INTO t (n) VALUES (0);
INSERT INTO t (n) VALUES (1);
...
INSERT INTO t (n) VALUES (9);
现在 select
交叉连接,使用任意多的别名 10^n 计数:
对于 100 条记录:
INSERT INTO X
SELECT t2.n*10 + t1.n FROM t t1, t t2
对于 1000 条记录:
INSERT INTO X
SELECT t3.n*100 + t2.n*10 + t1.n FROM t t1, t t2, t t3
对于 1,000,000 条记录:
INSERT INTO X
SELECT t6.n*100000 + t5.n * 10000 + t4.n*1000 + t3.n*100 + t2.n*10 + t1.n FROM t t1, t t2, t t3
我很确定这是可以在任何平台上运行的香草 SQL...
首先我插入了 ID 从 1000000 到 1000010 的记录(10 条记录),然后我使用了以下命令。
insert into apl2(id, data) select rownum ,s1.data from apl2 s1, apl2 s2, apl2 s3, apl2 s4, apl2 s5, apl2 s6 where rownum < 1000001;