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

Opret en trigger, der opdaterer en kolonne på én tabel, når en kolonne i en anden tabel opdateres

Hvordan får jeg dato og række-id?

Hvis det antages, at disse er kolonner i din ORDER-tabel kaldet DELIVERY_DATE og ID, skulle din trigger se nogenlunde sådan ud:

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;

Bemærk FOR EACH ROW-sætningen:det er nødvendigt for at referere til værdier fra individuelle rækker. Jeg har brugt en IF-konstruktion til at teste, om jeg skal udføre OPDATERING ved levering. Hvis du ikke har anden logik i din trigger, kan du skrive det sådan her...

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;

Jeg har besvaret det spørgsmål, du stillede, men som en sidebemærkning vil jeg påpege, at din datamodel er suboptimal. Et korrekt normaliseret design ville kun holde DELIVERY_DATE på én tabel:DELIVERY virker som det logiske sted for det.



  1. SQL Vælg mellem to tabeller med indre sammenføjning og grænse

  2. Kan ikke få adgang til forudbefolket SQLite-database ved hjælp af PhoneGap/Cordova i Android

  3. Vil du oprette forbindelse til MS SQL Server med Windows-godkendelse ved hjælp af Python?

  4. brug mysql SUM() i en WHERE-sætning