sql >> Database >  >> RDS >> Oracle

Maak een trigger die een kolom in de ene tabel bijwerkt wanneer een kolom in een andere tabel wordt bijgewerkt

Hoe kom ik aan de datum en rij-ID?

Ervan uitgaande dat dit kolommen zijn in uw ORDER-tabel met de naam DELIVERY_DATE en ID, zou uw trigger er ongeveer zo uit moeten zien:

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;

Let op de FOR EACH ROW-clausule:die is nodig om naar waarden uit afzonderlijke rijen te verwijzen. Ik heb een IF-constructie gebruikt om te testen of de UPDATE on Delivery moet worden uitgevoerd. Als je geen andere logica in je trigger hebt, zou je het zo kunnen schrijven...

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;

Ik heb de door u gestelde vraag beantwoord, maar terzijde wil ik u erop wijzen dat uw datamodel suboptimaal is. Een goed genormaliseerd ontwerp zou DELIVERY_DATE op slechts één tafel bevatten:DELIVERY lijkt de logische plaats ervoor.



  1. Een andere PL/SQL-procedure aanroepen binnen een procedure

  2. Beste manier om te controleren op lege of null-waarde

  3. Hoe MySQL-tijd te converteren

  4. Een wachtwoord uit een database verwijderen in Access 2016