Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como obter chaves geradas da inserção de lote JDBC no Oracle?


A especificação JDBC 4.1, seção 13.6 Recuperando valores gerados automaticamente diz:

É definido pela implementação se getGeneratedKeys retornará valores gerados após invocar o executeBatch método.

Portanto, você precisará verificar se o driver realmente o suporta para atualizações em lote. Conforme indicado na resposta de Philip O., a recuperação de chaves geradas não é compatível com atualizações em lote, conforme documentado no Oracle 12 JDBC Standards Support:

Você não pode combinar chaves geradas automaticamente com atualização em lote.

De qualquer forma, se for suportado pelo seu driver, sua instrução prepare deve ser alterada para o código abaixo para instruir o driver a recuperar as chaves geradas:
ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);

Nota:você pode precisar usar um dos outros métodos de preparação de chaves geradas (prepareStatement(sql, columnIndexes) ou prepareStatement(sql, columnNames) ) pois o Oracle retornará o ROW_ID com o método no meu exemplo.