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

Utilisation de la séquence Oracle pour insérer l'identifiant du journal dans 2 tables à partir de jdbc ?

En général, en sélectionnant le MAX(log_id) ne va pas vous donner la même valeur que logid_seq.nextval fourni. En supposant qu'il s'agit d'un système multi-utilisateurs, un autre utilisateur aurait pu insérer une autre ligne avec un log_id plus grand valeur que la ligne que vous venez d'insérer avant l'exécution de votre requête.

En supposant que INSERT sont exécutées dans la même session, l'option la plus simple est probablement d'utiliser le logid_seq.currval dans le deuxième INSERT déclaration. currval renverra la dernière valeur de la séquence qui a été renvoyée à la session en cours afin qu'elle renvoie toujours la même valeur qui a été générée par le nextval appeler dans la première instruction.

INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG) 
  VALUES( logid_seq.currval, ?, ? )

Alternativement, vous pouvez utiliser le RETURNING clause dans votre première instruction pour récupérer la valeur de la séquence dans une variable locale et l'utiliser dans la seconde INSERT déclaration. Mais c'est probablement plus de travail que d'utiliser simplement le currval .