Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Utwórz wyzwalacz, który aktualizuje kolumnę w jednej tabeli, gdy kolumna w innej tabeli jest aktualizowana

Jak uzyskać datę i identyfikator wiersza?

Zakładając, że są to kolumny w Twojej tabeli ORDER o nazwie DELIVERY_DATE i ID, Twój wyzwalacz powinien wyglądać mniej więcej tak:

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;

Zwróć uwagę na klauzulę FOR EACH ROW:która jest niezbędna do odwoływania się do wartości z poszczególnych wierszy. Użyłem konstrukcji IF, aby sprawdzić, czy wykonać UPDATE przy dostawie. Jeśli nie masz innej logiki w swoim wyzwalaczu, możesz napisać to w ten sposób...

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;

Odpowiedziałem na zadane przez Ciebie pytanie, ale na marginesie zaznaczę, że Twój model danych nie jest optymalny. Prawidłowo znormalizowany projekt utrzymałby DELIVERY_DATE tylko na jednym stole:DELIVERY wydaje się być dla niego logicznym miejscem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw wiele rekordów w Oracle

  2. Jak przyciąć TABLE w Oracle

  3. BDE kontra ADO w Delphi

  4. 2 sposoby na uzyskanie minut z wartości daty i godziny w bazie danych Oracle

  5. Oracle wybierz dla zachowania aktualizacji