sql >> Base de Datos >  >> RDS >> Oracle

Cree un disparador que actualice una columna en una tabla cuando se actualice una columna en otra tabla

¿Cómo obtengo la fecha y el ID de la fila?

Asumiendo que estas son columnas en su tabla ORDER llamadas DELIVERY_DATE e ID, su disparador debería verse así:

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;

Tenga en cuenta la cláusula FOR EACH ROW:que es necesaria para hacer referencia a valores de filas individuales. He usado una construcción IF para probar si ejecutar la ACTUALIZACIÓN en la entrega. Si no tiene otra lógica en su activador, puede escribirlo así...

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;

Respondí la pregunta que me hizo pero, aparte, señalaré que su modelo de datos no es óptimo. Un diseño correctamente normalizado mantendría DELIVERY_DATE en una sola tabla:DELIVERY parece el lugar lógico para ello.