sql - 如何批量插入两个表,一个人的id是另一个人的外键?

标签 sql oracle

有两张 table 。表用户有如下列

ID,NAME,AGE

并且表 Assets 具有如下列
ID,ID_USER,PRICE

Assets 的 ID_USER 是用户的 ID。

表用户的id 使用sequece seq_t_user。
Table Asset 的 id 使用 sequece 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);
但这非常耗时。有没有办法同时批量插入两个表?

最佳答案

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

我假设您从 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

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

关于sql - 如何批量插入两个表,一个人的id是另一个人的外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927758/

相关文章:

java - Oracle Form 频繁挂起

c# - OracleInternal.MTS.DTCPSPEManager 错误

sql - oracle sql 如何选择第一行和最后一行两个select

sql - 是什么原因导致 “Syntax error in INSERT INTO statement”

sql - ORACLE - 在子查询上选择计数

javascript - 点击javascript按钮添加好友

linux - Oracle Client for Console 屏幕

.net - 如何从 SQL Server 获取数据到 SqlDataReader?

java - 无法在 H2 中查看最近插入的结果

sql - plpgsql 中采用 bigint 的 pseudo_encrypt() 函数