2017-03-16 10 views
1

私はOracle 12cデータベースを持っています。そこにアーティファクトという名前のテーブルがあります。テーブルには、次のようになります。Oracle、JDBI @SqlBatch - INSERTによってタッチされたすべての行を取得

ID | BONETYPE | AGE 

IDアーティファクトが挿入されたときにデータベースがそれらを割り当てますので、IDとして、GENERATED ALWAYS 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です。

私が今問題にしているのは、IGNORE_ROW_ON_DUPKEY_INDEXヒントのために無視されたものを含め、影響を受けるすべての行のIDsを知りたいということです。それ、どうやったら出来るの?

@GetGeneratedKeysは、紛失したレコードの行のうち、IDsのみを取得します。

答えて

0

短い答えは、これを行うことができないということです。あなたはすべてを得るためにストアドプロシージャを書く必要がありますIDs

関連する問題