【发布时间】:2019-07-09 08:22:58
【问题描述】:
在我们的 Java 应用程序中实现批量插入代码时遇到了一个问题。下面是我们的表结构-
- 我们有三个表:Table1、Table2 和 Table3。
- Table1 的主键(SeqId,本质上是序列)是其余两个表(Table2 和 Table3)的外键。
当前实施:
作为当前批处理操作的一部分,对于每次迭代,我们首先在 Table1 中按顺序插入,然后是 Table2 和 Table3。
[伪代码]
INSERT INTO Table1(SeqId, OtherField1) VALUES (ID_SEQ.nextval, 'Some Val');
INSERT INTO Table2(SeqId, OtherField1) VALUES (someId2, ID_SEQ.currval, 'Some Val');
INSERT INTO Table3(SeqId, OtherField1) VALUES (someId3, ID_SEQ.currval, 'Some Val');
我们正在尝试什么:
现在我们正在尝试实现批量插入。我们创建了三个单独的 PreparedStatement,对于每次迭代,我们都在执行statement.addBatch();,最后我们依次执行statement.executeBatch()。
现在的问题是ID_SEQ.currval 将始终采用当前序列值,这不是我们想要的。针对 Table1 中 SeqId 的每个值,我们想要 Table2 和 Table3 中的对应行。
是否可以使用批量插入(不是过程或匿名块)来实现这一点?
我们正在使用 Oracle 11g 和 Java8
【问题讨论】:
标签: java oracle11g batch-insert