我们在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