创建一个触发器,在更新另一个表中的列时更新一个表上的列

Gig*_*aPr 16 sql oracle triggers

我有两张桌子

订单(id,date,note)

交货(Id,注,日期)

我想创建一个触发器,在订单中更新日期时更新交货日期.

我当时想做点什么

CREATE OR REPLACE TRIGGER your_trigger_name
BEFORE UPDATE
ON Order
DECLARE
BEGIN
   UPDATE Delivery set date = ??? where id = ???
END;
Run Code Online (Sandbox Code Playgroud)

如何获取日期和行ID?

谢谢

APC*_*APC 17

我如何获得日期和行ID?

假设这些是您的ORDER表上的列,名为DELIVERY_DATE和ID,您的触发器应如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

请注意FOR EACH ROW子句:引用各行的值是必需的.我使用IF构造来测试是否在交付时执行UPDATE.如果您的触发器中没有其他逻辑,您可以像这样写它...

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;
Run Code Online (Sandbox Code Playgroud)

我已经回答了你提出的问题但是,除此之外,我会指出你的数据模型是次优的.正确规范化的设计只能在一个表上保存DELIVERY_DATE:DELIVERY似乎是合乎逻辑的地方.