Если вы используете хранимую процедуру (SP)?
Я не думаю, что это приведет к значительному улучшению производительности, поскольку у вас есть оператор INSERT. SP был бы полезен, если бы у вас были сложные запросы, и его использование сэкономило бы время компиляции запроса. Простая инструкция вставки не займет много времени для компиляции.
Так что, на мой взгляд, отправляйте ваш запрос на лету, используя Java PreparedStatement.
Подход, которому я следовал бы:
Поскольку вам необходимо вставить все данные и выполнить откат в случае ошибок, я бы посоветовал вам вставить весь набор данных в пакетах. В случае сбоя пакета вы можете просто откатить изменения для пакета и повторить вставку для пакета.
Если вы отправите весь набор данных за один снимок, вам придется откатить все изменение, вызванное ошибкой в одном операторе вставки.
Еще одно преимущество использованияbatch - это то, что вы отправите данные пакета в одном соединении JDBC. Создание, поддержание и очистка соединения создает накладные расходы. Таким образом, пакетная обработка в некоторой степени экономит эти накладные расходы.
Кроме того, вы можете использовать многопоточность, где у вас могут быть задачи читать пакет данных, обрабатывать их и вставлять их (используя пакет). Ваши задачи могут получить доступ к соединениям JDBC из пула соединений, такого как HikariCP. Таким образом, хотя некоторые потоки заняты вставкой данных, другие могут читать и обрабатывать данные.
Некоторые материалы для чтения на многопоточных вставках: https://dba.stackexchange.com/questions/16131/how-does-oracle-handle-multiple-concurrent-inserts-against-one-table
PS: конструктивная критикаДобро пожаловать.