私は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
のみを取得します。