sql >> Databáze >  >> RDS >> Oracle

Vytvořte spouštěč, který aktualizuje sloupec v jedné tabulce, když je aktualizován sloupec v jiné tabulce

Jak získám datum a ID řádku?

Za předpokladu, že se jedná o sloupce ve vaší tabulce ORDER s názvem DELIVERY_DATE a ID, by váš spouštěč měl vypadat nějak takto:

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;

Všimněte si klauzule FOR EACH ROW:ta je nezbytná k odkazování na hodnoty z jednotlivých řádků. Použil jsem konstrukci IF k otestování, zda provést UPDATE při doručení. Pokud ve spouštěči nemáte žádnou jinou logiku, můžete to napsat takto...

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;

Odpověděl jsem na otázku, kterou jste položili, ale mimochodem zdůrazním, že váš datový model není optimální. Správně normalizovaný návrh by podržel DELIVERY_DATE pouze na jedné tabulce:DELIVERY se zdá být logickým místem.



  1. Existuje alternativa ANSI SQL ke klíčovému slovu MYSQL LIMIT?

  2. if (vyberte počet (sloupec) z tabulky)> 0 potom

  3. Emotikony pro iPhone se vloží do MySQL, ale stanou se prázdnou hodnotou

  4. Jak zřetězit mnoho řádků se stejným ID v SQL?