In het algemeen, het selecteren van de MAX(log_id)
zal je niet dezelfde waarde geven als logid_seq.nextval
mits. Ervan uitgaande dat dit een systeem voor meerdere gebruikers is, zou een andere gebruiker een andere rij kunnen hebben ingevoegd met een grotere log_id
waarde dan de rij die u zojuist hebt ingevoegd voordat uw zoekopdracht werd uitgevoerd.
Ervan uitgaande dat zowel INSERT
instructies in dezelfde sessie worden uitgevoerd, is de eenvoudigste optie waarschijnlijk het gebruik van de logid_seq.currval
in de tweede INSERT
uitspraak. currval
retourneert de laatste waarde van de reeks die is geretourneerd naar de huidige sessie, zodat deze altijd dezelfde waarde retourneert die is gegenereerd door de nextval
roep de eerste verklaring in.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Als alternatief kunt u de RETURNING
. gebruiken clausule in uw eerste instructie om de reekswaarde in een lokale variabele op te halen en die te gebruiken in de tweede INSERT
uitspraak. Maar dat is waarschijnlijk meer werk dan alleen de currval
.