Ogólnie rzecz biorąc, wybierając MAX(log_id)
nie da ci tej samej wartości, co logid_seq.nextval
pod warunkiem, że. Zakładając, że jest to system wielu użytkowników, inny użytkownik mógł wstawić kolejny wiersz z większym log_id
wartość niż wiersz, który właśnie wstawiłeś przed wykonaniem zapytania.
Zakładając, że oba INSERT
instrukcje są uruchamiane w tej samej sesji, najprostszą opcją jest prawdopodobnie użycie logid_seq.currval
w drugim INSERT
oświadczenie. currval
zwróci ostatnią wartość sekwencji, która została zwrócona do bieżącej sesji, więc zawsze zwróci tę samą wartość, która została wygenerowana przez nextval
zadzwoń w pierwszym oświadczeniu.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Alternatywnie możesz użyć RETURNING
klauzulę w pierwszej instrukcji, aby pobrać wartość sekwencji do zmiennej lokalnej i użyć jej w drugiej INSERT
oświadczenie. Ale to prawdopodobnie więcej pracy niż po prostu użycie currval
.