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

Tạo trình kích hoạt cập nhật một cột trên một bảng khi một cột trong bảng khác được cập nhật

Làm cách nào để lấy ngày và id hàng?

Giả sử đây là các cột trên bảng ORDER của bạn được gọi là DELIVERY_DATE và ID trình kích hoạt của bạn sẽ trông giống như sau:

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE ON Order
    FOR EACH ROW 
BEGIN
   if :new.delivery_date != :old.delivery_date
   then
       UPDATE Delivery d
       set d.delivery_date = :new.delivery_date
       where d.order_id = :new.id;
    end if;
END;

Lưu ý mệnh đề FOR ​​EACH ROW:điều đó là cần thiết để tham chiếu các giá trị từ các hàng riêng lẻ. Tôi đã sử dụng cấu trúc IF để kiểm tra xem có thực thi CẬP NHẬT khi Giao hàng hay không. Nếu bạn không có logic nào khác trong trình kích hoạt của mình, bạn có thể viết nó như thế này ...

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE OF delivery_date ON Order
    FOR EACH ROW 
BEGIN
   UPDATE Delivery d
   set d.delivery_date = :new.delivery_date
   where d.order_id = :new.id;
END;

Tôi đã trả lời câu hỏi mà bạn đã hỏi, nhưng, ngoài ra, tôi sẽ chỉ ra rằng mô hình dữ liệu của bạn là chưa tối ưu. Một thiết kế chuẩn hóa phù hợp sẽ chỉ giữ DELIVERY_DATE trên một bảng:DELIVERY có vẻ là nơi hợp lý cho nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiến trúc Oracle E-Business Suite trong 12.2

  2. Truyền mảng cho thủ tục Oracle từ c #

  3. Ngày của Javascript thành đối tượng ngày sql

  4. Oracle RAC N + 1 Dự phòng

  5. Quy trình do người dùng xác định với DBMS_STATS, Phần II