Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - mettre à jour l'enregistrement et renvoyer la date mise à jour dans la même requête

Vous avez décidé d'utiliser JDBCTemplate très probablement pour simplifier le code par rapport à plain JDBC .

Ce problème particulier à mon humble avis rend le plain JDBC solution proposée dans autre réponse beaucoup plus simple, donc je recommanderais définitivement d'obtenir la connexion à la base de données à partir de JDBCTemplate et de faire l'insertion de manière JDBC.

La solution la plus simple utilisant JDBCTemplate qui me vient à l'esprit est d'envelopper l'insert dans une PROCEDURE et renvoie l'horodatage sous la forme d'un OUT paramètre.

Exemple simple (Ajustez la logique horaire selon vos besoins)

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;
/

L'appel se fait en utilisant 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 contient la valeur renvoyée, par ex. [P_TIME:2019-10-19 11:58:10.0]

Mais je ne peux que répéter, dans ce cas d'utilisation particulier, IMHO JDBC est un sauvetage de JDBCTemplate;)