如何批量插入两个表,其中一个的id是另一个的外键?

Rob*_*Sun 6 sql oracle

有两张桌子。表用户有如下列

ID,NAME,AGE
Run Code Online (Sandbox Code Playgroud)

表资产有如下列

ID,ID_USER,PRICE
Run Code Online (Sandbox Code Playgroud)

Asset的ID_USER是用户的ID。

表User的id使用序列seq_t_user。表Asset的id使用序列seq_t_asset。

现在有1000000个用户等待插入。我们可以使用for循环来单独处理每条记录。

v_id_user = seq_t_user.nextval(); insert into User values(v_id_user, 'Lilie', 20); insert into Asset values(seq_t_asset.nextval(), v_id_user, 1000);

但这非常耗时。有没有办法同时批量插入两个表?

den*_*niz 2

看起来“无条件多表插入”就是您所需要的。

我假设您从 my_table 获取所有值,但您可以根据需要进行修改;

INSERT /*+ APPEND */ ALL
INTO USER (ID,NAME,AGE) 
    values (seq_t_user.nextval(), name, age)
INTO ASSET (ID,ID_USER,PRICE) 
    values (seq_t_asset.nextval(), seq_t_user.nextval(), price)
with MY_VALUES as
    (select /*+ parallel */ 
         name,
         age,
         price
     from my_table)
select /*+ parallel */ * from MY_VALUES
Run Code Online (Sandbox Code Playgroud)

编辑:我们了解到我们不能在 select 语句中的多表插入中使用序列。所以我们将序列移动到插入部分。