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

CẬP NHẬT với cú pháp THAM GIA cho Cơ sở dữ liệu Oracle

Cú pháp của câu lệnh UPDATE là:

http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm

nơi dml_table_expression_clause là:

Hãy chú ý đến ( subquery ) một phần của cú pháp trên.

subquery là một tính năng cho phép thực hiện cập nhật các phép nối.

Ở dạng đơn giản nhất, nó có thể là:

UPDATE (
   subquery-with-a-join
)
SET cola=colb

Trước khi cập nhật tham gia, bạn phải biết các hạn chế được liệt kê tại đây:

https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm

  • Một toán tử tập hợp
  • Toán tử DISTINCT
  • Một hàm tổng hợp hoặc phân tích
  • Mệnh đề GROUP BY, ORDER BY, MODEL, CONNECT BY hoặc START WITH
  • Một biểu thức tập hợp trong danh sách CHỌN
  • Một truy vấn con trong danh sách CHỌN
  • Một truy vấn con được chỉ định CHỈ CÓ ĐỌC
  • Tham gia, với một số ngoại lệ, như được ghi trong Hướng dẫn của Quản trị viên Cơ sở dữ liệu Oracle

và các quy tắc chung liên quan đến các chế độ xem có thể cập nhật - tại đây (phần:Updating a Join View ):
http:// docs .oracle.com / cd / B19306_01 / server.102 / b14231 / views.htm # sthref3055

Trước tiên, chúng ta có thể tạo một truy vấn con với một phép nối:

SELECT age 
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'

Truy vấn này chỉ trả về kết quả sau:

       AGE
----------
        30

và bây giờ chúng tôi có thể thử cập nhật truy vấn của mình:

UPDATE (
    SELECT age 
    FROM ages a
    JOIN names m ON a.id = m.id
    WHERE m.name = 'Sally'
)
SET age = age + 1;

nhưng chúng tôi gặp lỗi:

Lỗi này có nghĩa là một trong những hạn chế ở trên không được đáp ứng (bảng được lưu giữ khóa).

Tuy nhiên, nếu chúng tôi thêm khóa chính vào bảng của mình:

alter table names add primary key( id );
alter table ages add primary key( id );

thì bây giờ bản cập nhật hoạt động mà không có bất kỳ lỗi nào và kết quả cuối cùng là:

select * from ages;

        ID        AGE
---------- ----------
         1         25
         2         31
         3         35



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Chọn ngày giữa các phạm vi ngày bằng SQL

  2. Oracle:Sử dụng CTE với điều khoản cập nhật

  3. Đồng bộ hóa thủ tục PL / SQL. Làm thế nào để đảm bảo thực hiện thủ tục một lần duy nhất?

  4. Tên đã được sử dụng bởi một đối tượng hiện có trong VBA

  5. CHỌN gần đây nhất trong Oracle SQL Query