Мы столкнулись с проблемой при реализации кода пакетной вставки в нашем Java-приложении. Ниже приведена структура нашей таблицы -
- У нас есть три таблицы: Таблица1, Таблица2 и Таблица3.
- Первичный ключ таблицы Table1 (SeqId, который по сути является последовательностью) является ключевым ключом для остальных двух таблиц (Table2 и Table3).
Текущая реализация:
Как часть текущей пакетной операции, для каждой итерации мы сначала последовательно вставляем в Таблицу 1, а затем в Таблицу 2 и Таблицу 3.
[Псевдокод]
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
всегда будет принимать текущее значение последовательности, а не то, что мы хотим. Agaist каждое значение SeqId в таблице 1, мы хотим, чтобы соответствующие строки в таблице 2 и таблице 3.
Возможно ли реализовать это с помощью пакетной вставки (не процедуры или анонимного блока)?
Мы используем Oracle 11g
и Java8