sql >> Databasteknik >  >> RDS >> Oracle

Skapa en utlösare som uppdaterar en kolumn i en tabell när en kolumn i en annan tabell uppdateras

Hur får jag datum och rad-id?

Om vi ​​antar att dessa är kolumner i din ORDER-tabell som heter DELIVERY_DATE och ID bör din utlösare se ut ungefär så här:

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;

Observera FOR EACH ROW-satsen:som är nödvändig för att referera till värden från enskilda rader. Jag har använt en IF-konstruktion för att testa om UPPDATERING ska utföras vid leverans. Om du inte har någon annan logik i din trigger kan du skriva det så här...

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;

Jag har svarat på frågan du ställde, men som en avslutning vill jag påpeka att din datamodell är suboptimal. En korrekt normaliserad design skulle hålla DELIVERY_DATE på endast ett bord:DELIVERY verkar vara den logiska platsen för det.



  1. migrera data från MS SQL till PostgreSQL?

  2. Hur man skapar en databas från en mall i Access 2016

  3. Hur man jämför två kolumner i MySQL

  4. Fix:"Satsen BACKUP LOG är inte tillåten medan återställningsmodellen är SIMPLE" i SQL Server (och SQL Edge)