Oracle、JDBI @SqlBatch - 获取 INSERT 触及的所有行
Oracle, JDBI @SqlBatch - Get all rows touched by INSERT
我有一个 Oracle 12c 数据库。其中有一个名为 Artifacts 的 table。 table 看起来像这样:
ID | BONETYPE | AGE
ID
是一个 NUMBER(12,0)
GENERATED ALWAYS AS IDENTITY 因此数据库在插入工件时分配那些。 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
。
简短的回答是你不能这样做。您必须编写一个存储过程来获取所有 IDs
我有一个 Oracle 12c 数据库。其中有一个名为 Artifacts 的 table。 table 看起来像这样:
ID | BONETYPE | AGE
ID
是一个 NUMBER(12,0)
GENERATED ALWAYS AS IDENTITY 因此数据库在插入工件时分配那些。 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
。
简短的回答是你不能这样做。您必须编写一个存储过程来获取所有 IDs