Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erstellen Sie einen Trigger, der eine Spalte in einer Tabelle aktualisiert, wenn eine Spalte in einer anderen Tabelle aktualisiert wird

Wie erhalte ich das Datum und die Zeilen-ID?

Angenommen, dies sind Spalten in Ihrer ORDER-Tabelle namens DELIVERY_DATE und ID, sollte Ihr Trigger etwa so aussehen:

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;

Beachten Sie die FOR EACH ROW-Klausel:Diese ist erforderlich, um Werte aus einzelnen Zeilen zu referenzieren. Ich habe ein IF-Konstrukt verwendet, um zu testen, ob das UPDATE on Delivery ausgeführt werden soll. Wenn Sie keine andere Logik in Ihrem Trigger haben, könnten Sie es so schreiben ...

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;

Ich habe die von Ihnen gestellte Frage beantwortet, möchte aber nebenbei darauf hinweisen, dass Ihr Datenmodell suboptimal ist. Ein richtig normalisiertes Design würde DELIVERY_DATE nur in einer Tabelle enthalten:DELIVERY scheint der logische Ort dafür zu sein.