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