Като цяло, избирането на MAX(log_id)
няма да ви даде същата стойност като logid_seq.nextval
предоставени. Ако приемем, че това е система с много потребители, някой друг потребител може да е вмъкнал друг ред с по-голям log_id
стойност от реда, който току-що сте вмъкнали, преди вашата заявка да бъде изпълнена.
Ако приемем, че и двете INSERT
операторите се изпълняват в една и съща сесия, най-простият вариант вероятно е да използвате logid_seq.currval
във втория INSERT
изявление. currval
ще върне последната стойност на последователността, която е върната към текущата сесия, така че винаги ще връща същата стойност, която е генерирана от nextval
повикване в първия израз.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Като алтернатива можете да използвате RETURNING
клауза в първия ви израз, за да извлечете стойността на последователността в локална променлива и да я използвате във втория INSERT
изявление. Но това вероятно е повече работа от простото използване на currval
.