Nói chung, chọn MAX(log_id)
sẽ không cung cấp cho bạn cùng một giá trị mà logid_seq.nextval
cung cấp. Giả sử rằng đây là một hệ thống nhiều người dùng, một số người dùng khác có thể đã chèn một hàng khác có log_id
lớn hơn giá trị hơn hàng bạn vừa chèn trước khi truy vấn của bạn được thực thi.
Giả sử rằng cả INSERT
các câu lệnh được chạy trong cùng một phiên, tùy chọn đơn giản nhất có lẽ là sử dụng logid_seq.currval
trong INSERT
thứ hai bản tường trình. currval
sẽ trả về giá trị cuối cùng của chuỗi đã được trả lại cho phiên hiện tại, vì vậy nó sẽ luôn trả về cùng một giá trị được tạo bởi nextval
gọi trong câu lệnh đầu tiên.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG)
VALUES( logid_seq.currval, ?, ? )
Ngoài ra, bạn có thể sử dụng RETURNING
mệnh đề trong câu lệnh đầu tiên của bạn để tìm nạp giá trị trình tự vào một biến cục bộ và sử dụng giá trị đó trong INSERT
thứ hai bản tường trình. Nhưng đó có lẽ là công việc nhiều hơn là chỉ sử dụng currval
.