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
.