更新订单后触发

时间:2015-04-23 19:07:00

标签: sql oracle triggers sqlplus

我尝试创建一个触发器,一旦调度了订单中的所有项目,就将订单日期设置为系统日期。

我们有一个OrderHeader表,其中包含order_id和order_completed。每个订单将有1行

然后,我们将OrderLine表与orderline_order一起使用,并带有OrderHeader的外键。对于相同的orderline_order,此表可以有多行(因此订单的多个项目) Orderline在orderline_fulfilled中有一个字段,它是一个' Y'或者' N'

当所有orderline_fulfilled都是' Y'我想要一个触发器来将order_completed更新为sysdate。为了那个订单。我目前得到了下面的陈述,但我如何确保我只检查orderline_fulfilled是' Y'对于那个orderline_order,如果这是有意义的吗?

 create or repalce trigger Order_complete
  after update of Orderline_fulfilled
  on val354_orderline
  begin update val354_orderheader join val354_orderline on (Order_id = Orderline_order)
  set Order_completed = sysdate 
  where Orderline_fulfilled

1 个答案:

答案 0 :(得分:0)

我想你想要这样的东西:

CREATE OR REPLACE TRIGGER ORDER_COMPLETE
  AFTER UPDATE OF ORDERLINE_FULFILLED
    ON VAL354_ORDERLINE
BEGIN
  UPDATE VAL354_ORDERHEADER h
    SET h.ORDER_COMPLETED = 'Y'
    WHERE h.ORDER_COMPLETED = 'N' AND
          NOT EXISTS (SELECT *
                        FROM VAL354_ORDERLINE l
                        WHERE l.ORDERLINE_ORDER = h.ORDER_ID AND
                              l.ORDERLINE_FULFILLED = 'N');
END ORDER_COMPLETE;

试一试。

分享并享受