Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:aggiorna il record e restituisce la data aggiornata nella stessa query

Molto probabilmente hai deciso di utilizzare JDBCTemplate per semplificare il codice rispetto a JDBC semplice .

Questo particolare problema IMHO rende il JDBC semplice soluzione proposta in altra risposta molto più semplice, quindi consiglierei sicuramente di ottenere la connessione al database da JDBCTemplate e di fare l'inserimento in modo JDBC.

La soluzione più semplice che mi viene in mente utilizzando JDBCTemplate è avvolgere l'inserto in una PROCEDURE e restituisci il timestamp come OUT parametro.

Esempio semplice (Regola il log di tempo come richiesto)

create procedure insert_with_return_time (p_str VARCHAR2, p_time OUT DATE) as
BEGIN 
   insert into identity_pk(pad) values(p_str);
   p_time := sysdate;
END;
/

La chiamata viene eseguita utilizzando SimpleJdbcCall

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("insert_with_return_time");
SqlParameterSource params = new MapSqlParameterSource().addValue("p_str", str);
Map<String, Object> out = jdbcCall.execute(params);

La Map contiene il valore restituito ad es. [P_TIME:2019-10-19 11:58:10.0]

Ma posso solo ripetere, in questo caso d'uso particolare IMHO JDBC è un salvataggio da JDBCTemplate;)