2017-03-16 67 views
1

我有一個Oracle 12c數據庫。有一個名爲Artifacts的表格。該表是這樣的:Oracle,JDBI @SqlBatch - 獲取INSERT觸及的所有行

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

回答

0

簡短的回答是,你不能這樣做。你必須編寫一個存儲過程來獲得所有的IDs