通过递增Pk,使用单个记录将多个记录插入表中

时间:2016-10-25 11:32:44

标签: oracle

我必须使用单个现有记录将一百万条记录插入到表中,只需增加PK即可。有没有一种简单的方法可以做到。

1 个答案:

答案 0 :(得分:1)

是的,这是一个简单的方法。这是一个生成一百万行并将其交叉连接到现有表中的一行(在本例中为双重)的简单示例:

WITH dummy AS (SELECT LEVEL lvl
               FROM   dual
               CONNECT BY LEVEL <= 1000)
SELECT sd.col1, -- replace with your column list that you want to insert into the table
       ROWNUM pk -- replace with the sequence used to generate the pk, e.g.:   pk_seq.nextval
FROM   (SELECT 'abc' col1 FROM dual) sd -- replace with your 1 row selected from your table
       CROSS JOIN dummy
       CROSS JOIN dummy;

COL1         PK
---- ----------
abc           1
abc           2
abc           3
abc           4
...

所以你的insert语句看起来像:

insert into your_table (pk_col, col1, col2, col3, ...)
WITH dummy AS (SELECT LEVEL lvl
               FROM   dual
               CONNECT BY LEVEL <= 1000)
SELECT your_table_pk_seq.nextval pk_col,
       yt.col1,
       yt.col2,
       yt.col3,
       ...
FROM   your_table yt
       CROSS JOIN dummy
       CROSS JOIN dummy;

这假设你有一个生成主键列值的序列,当然你有......对吗?

但这是一个奇怪的要求 - 除非您使用它来创建测试数据?在这种情况下,我希望您能够更改其他一些列以创建更真实的数据。