Database 当进行销售以更新发货表时的触发器
我想知道在sales表中插入新销售后,如何创建一个触发器来更新Dispatch表。我猜代码的前几行是这样的: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
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;
/
请注意,我不得不对您的数据模型进行一些假设,因为您没有提供足够的信息:
<> > >编辑2:< /强>我已经修改了触发器代码以反映您的响应。您可以考虑告诉人们您使用的是什么DBMS,因为触发器有点不同。MS SQL Server、Oracle、MySQL、Postgres等等?为什么不在应用程序本身中这样做呢?为什么要添加触发器?有一个完成销售的应用程序代码,可以轻松地将行添加到Dispatch。为什么要使用触发器?为什么不更新应用程序呢?因为这是一个要求,一旦销售完成,我必须使用触发器来更新发货表。@taksIV:“这是一个要求,我必须使用触发器”这是一个非常愚蠢的要求。这显然太复杂了(或者你不会在这里寻求帮助)。你可以建议另一种方法更简单、更便宜、更可靠、更不复杂。允许“推回”愚蠢的要求,比如“在应用程序更改更简单的地方使用触发器”。我的要求,我指的是我正在做的任务的要求。