Java Oracle,JDBI@SqlBatch-获取插入所涉及的所有行
我有一个Oracle 12c数据库。其中有一个名为Artifacts的表。该表如下所示:Java Oracle,JDBI@SqlBatch-获取插入所涉及的所有行,java,sql,database,oracle,jdbi,Java,Sql,Database,Oracle,Jdbi,我有一个Oracle 12c数据库。其中有一个名为Artifacts的表。该表如下所示: ID | BONETYPE | AGE INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(Artifacts, U_ARTIFACTS) */ INTO Artifacts ("BONETYPE", "AGE") VALUES ('dinosaur', '800000'); ID是一个始终作为标识生成的编号(12,0),因此数据库在插入工件时分配这些编号BONETYPE和AGE
ID | BONETYPE | AGE
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(Artifacts, U_ARTIFACTS) */
INTO Artifacts ("BONETYPE", "AGE")
VALUES ('dinosaur', '800000');
ID
是一个始终作为标识生成的编号(12,0)
,因此数据库在插入工件时分配这些编号BONETYPE
和AGE
只是字符串。在BONETYPE
和AGE
上有一个独特的约束
我有一个数据库查询,用于插入丢失的记录,如下所示:
ID | BONETYPE | AGE
INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(Artifacts, U_ARTIFACTS) */
INTO Artifacts ("BONETYPE", "AGE")
VALUES ('dinosaur', '800000');
奇怪的提示忽略\u DUPKEY\u索引上的\u ROW\u是因为其中一些工件可能已经插入
此数据库查询实际上是通过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(“插入/*+忽略索引上的行(工件,工件)*/\n”+
“放入工件(\'BONETYPE\,\'AGE\”)\n”+
“值(:BoneType,:Age)”)
@GetGeneratedKeys(columnName=“ID”,value=OracleGeneratedKeyMapper.class)
int[]putArtifacts(@Bind(“BoneType”)列出BoneType,@Bind(“Age”)列出ages);
出于性能原因,它是一个@SqlBatch
我现在的问题是,我想知道所有受影响行的id
,包括那些由于IGNORE\u ROW\u ON\u DUPKEY\u INDEX
提示而被忽略的行。我该怎么做
@GetGeneratedKeys
仅获取丢失记录行的ID
。简单的回答是,您不能这样做。您必须编写一个存储过程来获取所有的id
简短的回答是您不能这样做。您必须编写一个存储过程来获取所有id