Obecně platí, že výběr MAX(log_id)
vám nedá stejnou hodnotu jako logid_seq.nextval
pokud. Za předpokladu, že se jedná o víceuživatelský systém, mohl nějaký jiný uživatel vložit další řádek s větším log_id
hodnotu než řádek, který jste právě vložili před provedením dotazu.
Za předpokladu, že obě INSERT
příkazy se spouštějí ve stejné relaci, nejjednodušší možností je pravděpodobně použít logid_seq.currval
ve druhém INSERT
tvrzení. currval
vrátí poslední hodnotu sekvence, která byla vrácena aktuální relaci, takže vždy vrátí stejnou hodnotu, která byla vygenerována nextval
zavolejte v prvním příkazu.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Alternativně můžete použít RETURNING
klauzule ve vašem prvním příkazu k načtení hodnoty sekvence do lokální proměnné a její použití ve druhém INSERT
tvrzení. Ale to je pravděpodobně více práce než pouhé použití currval
.