Oracle
 sql >> Database >  >> RDS >> Oracle

Crea un trigger che aggiorni una colonna su una tabella quando viene aggiornata una colonna in un'altra tabella

Come ottengo la data e l'ID riga?

Supponendo che si tratti di colonne nella tabella ORDER chiamate DELIVERY_DATE e ID, il tuo trigger dovrebbe essere simile a questo:

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;

Notare la clausola FOR EACH ROW:necessaria per fare riferimento ai valori delle singole righe. Ho usato un costrutto IF per verificare se eseguire l'AGGIORNAMENTO alla consegna. Se non hai altra logica nel tuo trigger potresti scriverlo in questo modo...

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;

Ho risposto alla domanda che hai posto ma, per inciso, sottolineerò che il tuo modello di dati non è ottimale. Un design correttamente normalizzato conterrebbe DELIVERY_DATE su una sola tabella:DELIVERY sembra il posto logico per questo.