sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo obtener claves generadas de la inserción por lotes de JDBC en Oracle?

La especificación JDBC 4.1, sección 13.6 Recuperación de valores generados automáticamente dice:

Está definido por la implementación en cuanto a si getGeneratedKeys devolverá los valores generados después de invocar el executeBatch método.

Por lo tanto, deberá verificar si su controlador realmente lo admite para actualizaciones por lotes. Como se indica en la respuesta de Philip O., la recuperación de claves generadas no es compatible con actualizaciones por lotes como se documenta en Oracle 12 JDBC Standards Support:

No puede combinar claves generadas automáticamente con actualización por lotes.

En cualquier caso, si su controlador lo admite, su declaración debe cambiarse al siguiente código para indicarle al controlador que recupere las claves generadas:

ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);

Nota:es posible que deba usar uno de los otros métodos de preparación de claves generadas (prepareStatement(sql, columnIndexes) o prepareStatement(sql, columnNames) ) ya que Oracle devolverá el ROW_ID con el método de mi ejemplo.