Trong trường hợp nào chúng ta cần sử dụng for update nowait
trong con trỏ.Khi nào tôi nên sử dụng 'để cập nhật ngay bây giờ' trong con trỏ?
Trả lời
Sử dụng for update nowait
sẽ khiến các hàng bận và nhận khóa cho đến khi thực hiện cam kết hoặc khôi phục. Bất kỳ phiên nào khác cố gắng lấy khóa sẽ nhận được thông báo lỗi Oracle như ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired instead of waiting the lock to release
.
Session1:
CURSOR abc_cur
IS
select * from dept where deptno =10 for update nowait;
đây các hàng bị khóa cho đến khi con trỏ được đóng cửa hoặc một cam/rollback được thực hiện. Nếu khi đó, một người dùng khác từ phiên 2 cố gắng truy cập các hồ sơ cùng thì điều này sẽ ném ra một lỗi như hình dưới đây:
Session2:
select * from dept where deptno =10 for update nowait;
Thành viên này thậm chí còn không thể cập nhật hoặc xóa các hồ sơ tương tự đã bị khóa bởi phiên đầu tiên.
ERROR at line 1:
`ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired`
Cách sử dụng: Bây giờ nếu bạn muốn làm một số thao tác trên bộ nhất định hồ sơ và bạn không muốn người dùng khác từ phiên khác để ghi đè lên dữ liệu của bạn thì trước tiên bạn phải khóa các hồ sơ (sử dụng for update nowait
) và sau đó thực hiện thao tác của bạn. Sau khi bạn hoàn tất thao tác, hãy đóng con trỏ và commit.
EDIT Giả sử trong phiên tôi 1 tôi đã thực hiện kịch bản sau đây:
declare
cursor abc is select * from temp ;
temp abc%rowtype;
begin
open abc;
end;
bây giờ trong phiên 2 Tôi thực
select * from temp ;
0 rows found
Nếu tôi thực thi kịch bản tương tự một lần nữa
declare
cursor abc is select * from temp ;
temp abc%rowtype;
begin
open abc;
end;
Sau đó, tôi nhận được ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired instead of waiting the lock to release.
- 1. Cách cập nhật ngày SQL bằng cách sử dụng NGAY BÂY GIỜ()
- 2. Khi nào tôi nên sử dụng con trỏ thô trên con trỏ thông minh?
- 3. Tôi có thể sử dụng HTML5 ngay bây giờ để tạo một trang web
- 4. GKSession không được dùng nữa trong ios7, tôi nên sử dụng gì bây giờ?
- 5. mysql cập nhật nhiều cột với cùng một lúc ngay bây giờ()
- 6. kiểu dệt ngay bây giờ trong org-babel
- 7. Tôi có nên phát triển mã vạch ngay bây giờ không?
- 8. Có phải múi giờ cụ thể sử dụng DST ngay bây giờ không?
- 9. JavaScript: Cách lấy setInterval() để bắt đầu ngay bây giờ?
- 10. JDK7 có an toàn để sử dụng ngay bây giờ không?
- 11. Mysql + django ngoại lệ: "Commands đồng bộ; bạn không thể chạy lệnh này ngay bây giờ"
- 12. Chọn mục nhập theo ngày -> = NGAY BÂY GIỜ(), MySQL
- 13. Đã cập nhật thành EF5 ngay bây giờ Chú thích không được ánh xạ không hoạt động
- 14. ShareKit hỗ trợ iOS 5 ngay bây giờ?
- 15. Tôi có thể sử dụng các câu lệnh chuẩn bị thực sự cho MySQL với PDO ngay bây giờ không?
- 16. Có thể sử dụng createQueryBuilder để chèn/cập nhật không? Nếu không, tôi nên sử dụng chức năng nào?
- 17. Chọn bản ghi từ NGAY BÂY GIỜ() -1 Ngày
- 18. python ngay bây giờ, tiếp theo, n lần lặp
- 19. sử dụng git cherry-pick ngay bây giờ nhưng hợp nhất các thay đổi sau
- 20. Tai nạn ứng dụng iPhone ngay sau khi cập nhật
- 21. Khi nào tôi nên gõ struct so với con trỏ để cấu trúc?
- 22. tuần (NGAY BÂY GIỜ) bắt đầu vào Chủ Nhật Cần bắt đầu vào Thứ Hai
- 23. tôi nên sử dụng phương pháp PUT để cập nhật, nếu tôi cũng cập nhật một thuộc tính timestamp
- 24. Bạn có thể sử dụng <input type = "tel" /> ngay bây giờ không?
- 25. Mercurial - Khi nào sử dụng cập nhật
- 26. Clojure có chạy trên Azure ngay bây giờ không?
- 27. Tôi nên xử lý thao tác chỉnh sửa và cập nhật khi sử dụng Đối tượng mẫu như thế nào?
- 28. Làm cách nào để mã hóa hoạt động "đồng bộ hóa ngay bây giờ" trên Android?
- 29. Khi nào tôi nên sử dụng AQL?
- 30. Tôi nên sử dụng lại con trỏ trong mô-đun MySQLdb python
Vì vậy, nếu tôi không chờ đợi tôi thậm chí không thể tìm nạp (SELECT) cùng một hàng từ phiên khác, tôi có đúng không? – user1
Nếu tôi muốn tìm nạp nhưng không cập nhật cùng một hàng từ một phiên khác, tôi nên xử lý như thế nào? – user1
@ user1: có bạn có thể chọn các hàng tương tự từ phiên khác, nhưng bạn không thể khóa các hàng tương tự, nếu điều này bị khóa bởi một phiên khác. Bạn có thể tìm nạp các hàng từ phiên khác. –