Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

so sánh nguyên tử và hoán đổi trong cơ sở dữ liệu

PK có phải là khóa chính không? Sau đó, đây không phải là một vấn đề, nếu bạn đã biết khóa chính thì không có môn thể thao nào. Nếu pk is khóa chính, thì điều này đặt ra câu hỏi rõ ràng là làm thế nào bạn có biết pk của món đồ cần hủy ...

Vấn đề là nếu bạn không biết khóa chính và muốn giảm giá trị "có sẵn" tiếp theo (tức là. status =y) và đánh dấu nó là mất giá trị (xóa nó hoặc đặt trạng thái =z).

Cách thích hợp để làm điều này là sử dụng một câu lệnh duy nhất. Thật không may, cú pháp khác nhau giữa Oracle và SQL Server. Cú pháp SQL Server là:

update top (1) [<table>]
set status = z 
output DELETED.*
where  status = y;

Tôi không đủ quen thuộc với mệnh đề RETURNING của Oracle để đưa ra một ví dụ tương tự như mệnh đề OUTPUT của SQL.

Các giải pháp SQL Server khác yêu cầu các gợi ý khóa trên SELECT (với UPDLOCK) phải chính xác. .

Trong mọi trường hợp, hành vi bạn có trong bài viết gốc là không chính xác. Nhiều phiên đều có thể chọn (các) hàng giống nhau và thậm chí tất cả đều cập nhật hàng đó, trả lại (các) mục có giá trị giống nhau cho nhiều người đọc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL tương đương với SYSDATE của Oracle là gì?

  2. Tạo một bảng / chế độ xem phẳng của một tập hợp dữ liệu được xác định theo thứ bậc

  3. Oracle APEX - Bảng tra cứu với một số liên kết

  4. Sự phụ thuộc của các biểu mẫu Oracle

  5. Cách lấy dữ liệu BLOB bằng Oracle ODBC