У меня есть база данных Oracle 12c. Там есть таблица Артефакты. Таблица выглядит так:
ID | BONETYPE | AGE
ID
- это NUMBER(12,0)
ВСЕГДА СОЗДАВАЕМАЯ КАК ИДЕНТИЧНОСТЬ, поэтому база данных назначает их при вставке артефактов. BONETYPE
и AGE
- это просто строки. Существует уникальное ограничение на BONETYPE
и AGE
.
У меня есть запрос к базе данных для вставки отсутствующих записей, который выглядит так:
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(Artifacts, U_ARTIFACTS) */
INTO Artifacts ("BONETYPE", "AGE")
VALUES ('dinosaur', '800000');
Странная подсказка IGNORE_ROW_ON_DUPKEY_INDEX
связана с тем, что некоторые из этих артефактов, возможно, уже были вставлены.
Этот запрос к базе данных фактически выдается через запрос JDBI:
@SqlBatch("INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(Artifacts, U_ARTIFACTS) */\n" +
"INTO Artifacts ( \"BONETYPE\", \"AGE\" )\n" +
"VALUES ( :BoneType, :Age )")
@GetGeneratedKeys(columnName = "ID", value = OracleGeneratedKeyMapper.class)
int[] putArtifacts(@Bind("BoneType") List<String> boneTypes, @Bind("Age") List<String> ages);
Это @SqlBatch
по соображениям производительности.
Проблема, с которой я столкнулся сейчас, заключается в том, что я хочу знать IDs
всех затронутых строк, включая те, которые были проигнорированы из-за подсказки IGNORE_ROW_ON_DUPKEY_INDEX
. Как я могу это сделать?
@GetGeneratedKeys
дает мне только IDs
строк отсутствующих записей.