我有两张桌子
订单(id,date,note)
和
交货(Id,Note,Date)
当订单更新日期时,我想创建一个更新交货日期的触发器.
我在想这样做
CREATE OR REPLACE TRIGGER your_trigger_name BEFORE UPDATE ON Order DECLARE BEGIN UPDATE Delivery set date = ??? where id = ??? END;
如何获取日期和行ID?
谢谢
解决方法
How do i get the date and row 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;
注意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;
我已经回答了你问过的问题,但是,我将指出,你的数据模型是次优的.正确的规范化设计只能在一个表上保持DELIVERY_DATE:DELIVERY似乎是合适的位置.