Tôi đang tái cấu trúc quy trình nhập dữ liệu cho một ứng dụng doanh nghiệp và bắt gặp một đoạn trích tôi muốn tìm một giải pháp tốt hơn. Khi nhập dữ liệu, chúng ta phải tạo một thực thể duy nhất cho mỗi tập dữ liệu và có một bộ đếm trong một trường được sử dụng để gán id này tuần tự. Bạn đọc lĩnh vực này để có được id miễn phí tiếp theo và tăng nó sau đó để chuẩn bị cho lần sau.Oracle SQL: Cách đọc và gia tăng trường
Tại thời điểm này được thực hiện theo hai bước trong ứng dụng ban đầu, được viết trong 'C':
SELECT idnext FROM mytable;
UPDATE mytable SET idnext = idnext + 1;
Rõ ràng có một điều kiện chủng tộc ở đây, nếu nhiều quá trình làm điều tương tự.
Chỉnh sửa: Điều quan trọng cốt lõi: Tôi không thể chạm vào định nghĩa cơ sở dữ liệu/trường, quy tắc này ra một chuỗi.
Chúng tôi đang viết lại trong perl và tôi muốn làm điều tương tự, nhưng tốt hơn. Một giải pháp nguyên tử sẽ tốt đẹp. Rất tiếc, các kỹ năng SQL của tôi bị giới hạn, vì vậy tôi chuyển sang trí tuệ tập thể :-)
Tôi cảm thấy sql cập nhật chỉ đủ đúng 'CẬP NHẬT mytable SET idnext = idnext + 1;' tại sao bạn cần phải đọc idnext đến máy chủ? –