Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Crie um gatilho que atualize uma coluna em uma tabela quando uma coluna em outra tabela for atualizada


Como faço para obter a data e o ID da linha?

Supondo que sejam colunas em sua tabela ORDER chamadas DELIVERY_DATE e ID, seu gatilho deve ser algo assim:
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;

Observe a cláusula FOR EACH ROW:ela é necessária para referenciar valores de linhas individuais. Eu usei uma construção IF para testar se deve ser executado o UPDATE na entrega. Se você não tiver outra lógica em seu gatilho, poderá escrevê-lo assim ...
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;

Respondi à pergunta que você fez, mas, como um aparte, salientarei que seu modelo de dados está abaixo do ideal. Um design devidamente normalizado manteria DELIVERY_DATE em apenas uma tabela:DELIVERY parece o lugar lógico para isso.