Database 当进行销售以更新发货表时的触发器

Database 当进行销售以更新发货表时的触发器,database,oracle,triggers,insert,Database,Oracle,Triggers,Insert,我想知道在sales表中插入新销售后,如何创建一个触发器来更新Dispatch表。我猜代码的前几行是这样的: create trigger sale_trig after insert of sale_id on sales ..... 但我不知道接下来该怎么做。 我正在使用iSQL Plus 销售表包括:sale\u id,sale\u price,sale\u date,产品编号,产品id,客户id,销售id。 发货表包括:dispatch\u id,shelfLoc,数量,prod\u

我想知道在sales表中插入新销售后,如何创建一个触发器来更新Dispatch表。我猜代码的前几行是这样的:

create trigger sale_trig
after insert of sale_id on sales
.....
但我不知道接下来该怎么做。 我正在使用iSQL Plus

销售表包括:
sale\u id
sale\u price
sale\u date
产品编号
产品id
客户id
销售id
。 发货表包括:
dispatch\u id
shelfLoc
数量
prod\u id
prod\u name

我猜,因为我在Dispatch表中没有
sale\u id
,所以我需要先将其添加进去,并将其设置为外键,但我不确定

编辑

我正在为数据库创建测试数据。他们给我们的模式说,出于某种原因,我们需要在Dispatch表中包含
prod\u name
,但我认为我们只需要将它与
prod\u id
链接


好吧,也许这不是更新。那么它是否只是一个新的插入到Dispatch表中?我正在使用这个iSQL Plus。对于
shelfLoc
我们被告知使用随机生成器生成随机字符串。那我怎么把它和触发器联系起来呢?(我希望这是有意义的)

我不知道为什么您的Dispatch表有PROD NAME列-这应该可以通过PROD ID通过外键查找产品来派生。它确实需要一个指向SALES的链接,否则dispatcher如何才能找到发送地址。我还认为它需要一个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;
/
请注意,我不得不对您的数据模型进行一些假设,因为您没有提供足够的信息:

  • desp_id由一个序列填充
  • shelfloc通过一些 一种查找
  • sales.no_of_产品映射到 发货数量
  • 编辑:重新标记您的问题时,更新标签让我重新阅读您的问题。你说你想更新发送表,但我不明白为什么。为什么在下订单之前您会有发货记录?那么有什么需要更新的呢


    <> > >编辑2:< /强>我已经修改了触发器代码以反映您的响应。

    您可以考虑告诉人们您使用的是什么DBMS,因为触发器有点不同。MS SQL Server、Oracle、MySQL、Postgres等等?为什么不在应用程序本身中这样做呢?为什么要添加触发器?有一个完成销售的应用程序代码,可以轻松地将行添加到Dispatch。为什么要使用触发器?为什么不更新应用程序呢?因为这是一个要求,一旦销售完成,我必须使用触发器来更新发货表。@taksIV:“这是一个要求,我必须使用触发器”这是一个非常愚蠢的要求。这显然太复杂了(或者你不会在这里寻求帮助)。你可以建议另一种方法更简单、更便宜、更可靠、更不复杂。允许“推回”愚蠢的要求,比如“在应用程序更改更简单的地方使用触发器”。我的要求,我指的是我正在做的任务的要求。