Oracle
 sql >> Base de données >  >> RDS >> Oracle

Créer un déclencheur qui met à jour une colonne sur une table lorsqu'une colonne dans une autre table est mise à jour

Comment puis-je obtenir la date et l'identifiant de la ligne ?

En supposant qu'il s'agisse de colonnes de votre table ORDER appelées DELIVERY_DATE et ID, votre déclencheur devrait ressembler à ceci :

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;

Notez la clause FOR EACH ROW :qui est nécessaire pour référencer les valeurs des lignes individuelles. J'ai utilisé une construction IF pour tester s'il faut exécuter la mise à jour à la livraison. Si vous n'avez pas d'autre logique dans votre déclencheur, vous pouvez l'écrire comme ceci...

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;

J'ai répondu à la question que vous avez posée mais, en aparté, je soulignerai que votre modèle de données est sous-optimal. Une conception correctement normalisée contiendrait DELIVERY_DATE sur une seule table : DELIVERY semble l'endroit logique pour cela.