在进行销售以更新发货表时触发

时间:2009-08-23 10:22:04

标签: database oracle triggers insert

我想知道在将新的销售插入销售表后,我将如何创建触发器以更新发货表。我猜测代码的前几行将如下所示:

create trigger sale_trig
after insert of sale_id on sales
.....

但我不知道如何做其余的事情。 我正在使用iSQL Plus。

销售表包括:sale_idsale_pricesale_dateno_of_prodsprod_idcust_iddesp_id 。 发货表包括:desp_idshelfLocquantityprod_idprod_name

我猜是因为我在发货表中没有sale_id,我需要先添加它并将其作为外键,但我不确定。

修改

我正在为数据库创建测试数据。他们给我们的模式说我们需要在发货表中包含prod_name出于某种原因,但我认为我们只需要将它与prod_id相关联。

好吧也许不是更新。那么它只是一个新的插入发货表吗?我正在将它用于iSQL Plus。对于shelfLoc,我们被告知使用随机生成器生成随机字符串。那么如何将其链接到触发器? (我希望这是有道理的)

1 个答案:

答案 0 :(得分:1)

我不知道为什么你的DESPATCH表有PROD NAME列 - 应该通过PROD ID在PRODUCT上进行外键查找。它确实需要一个SALES链接,否则调度员将如何找到发送它的地址。我还认为它需要一个DATE_DISPATCHED列,只有在邮寄订单后才能填充。

您没有说您正在使用的数据库。我将使用Oracle,因为它是我最熟悉的。

create or replace trigger sale_trig 
    after insert on sales for each row
begin
    insert into despatch
      (desp_id
       , shelfLoc
       , quantity
       , prod_id
       , prod_name
       , sales_id)
    values
      (despatch_sequence.nextval
       , dbms_random.string('U', 5)
       , :new.no_of_prods
       , :new.prod_id
       , :new.prod_name
       , :new.sales_id);
end;
/

请注意,我不得不对您的数据模型做出一些假设,因为您没有提供足够的信息:

  1. desp_id填充了序列
  2. 通过一些填充了shelfloc 有点查找
  3. sales.no_of_prods映射到     despatch.quantity
  4. 修改,同时重新提问,更新标记让我重新阅读了您的问题。你说你想更新DESPATCH表,但我不明白为什么。为什么在下订单之前你会有DESPATCH记录?那么更新有什么?

    编辑2:我修改了触发器代码以反映您的回复。