Secara umum, memilih MAX(log_id)
tidak akan memberi Anda nilai yang sama dengan logid_seq.nextval
asalkan. Dengan asumsi bahwa ini adalah sistem multi-pengguna, beberapa pengguna lain dapat menyisipkan baris lain dengan log_id
yang lebih besar nilai dari baris yang baru saja Anda sisipkan sebelum kueri Anda dieksekusi.
Dengan asumsi bahwa keduanya INSERT
pernyataan dijalankan dalam sesi yang sama, opsi paling sederhana mungkin menggunakan logid_seq.currval
di INSERT
kedua penyataan. currval
akan mengembalikan nilai terakhir dari urutan yang dikembalikan ke sesi saat ini sehingga akan selalu mengembalikan nilai yang sama yang dihasilkan oleh nextval
panggil pernyataan pertama.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Atau, Anda dapat menggunakan RETURNING
klausa dalam pernyataan pertama Anda untuk mengambil nilai urutan ke dalam variabel lokal dan menggunakannya dalam INSERT
kedua penyataan. Tapi itu mungkin lebih berhasil daripada sekadar menggunakan currval
.