У меня есть данные в объекте java как data1, data2.
data1 и data2 вместе образуют составной ключ в myTable, куда я хочу вставить объект.
Запись происходит какпартияКак 10 операторов вставки подготовлены с использованием 10 объектов и выполняются как пакет.
Я хочу вставить вышеуказанные данные с ограничением: data1 + data2 уже не должны присутствовать в myTable, т.е. data1 + data2 должны быть уникальными - если они уникальны, тогда писать иначе, просто игнорировать.
Я использую следующий запрос:
Insert into mySchema.myTable(column1, column2)
select 'abc', '123'
from SYSIBM.DUAL
where not exists
( select 1
from mySchema.myTable A
where 'abc' = A.column1
and '123' = A.column2
)
Выполнение указанного выше запроса независимо для одного набора данных выполняется успешно.
Однако при запуске в пакетном сценарии я получаю "com.ibm.db2.jcc.b.ie: Неатомный пакетный сбой. "ошибка.
Я думаю, что это как-то связано с использованием SYSIBM.DUAL в пакетном сценарии.
Код, который не работает:
Запрос вставки:
Insert into mySchema.myTable(column1, column2)
select ?,? from SYSIBM.DUAL
where not exists (
select 1 from mySchema.myTable A
where ?=A.column1 and ?=A.column2)
Установщики операторов:
ps.setString(1, item.getColumn1());
ps.setString(2, item.getColumn2());
ps.setString(3, item.getColumn1());
ps.setString(4, item.getColumn2());
, где item - это объект java, содержащий двастолбцы для записи.
Ошибка:
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;плохая грамматика SQL [вставить в mySchema.myTable (column1, column2) выберите?,?из SYSIBM.DUAL, где не существует (выберите 1 из mySchema.myTable A, где? = A.column1 и? = A.column2)];Вложенное исключение - com.ibm.db2.jcc.b.ie: неатомарная ошибка пакета.Партия была отправлена, но по крайней мере одно исключение произошло с отдельным участником партии.Используйте getNextException (), чтобы получить исключения для определенных пакетных элементов.