我想知道在将新的销售插入销售表后,我将如何创建触发器以更新发货表。我猜测代码的前几行将如下所示:
create trigger sale_trig
after insert of sale_id on sales
.....
但我不知道如何做其余的事情。 我正在使用iSQL Plus。
销售表包括:sale_id
,sale_price
,sale_date
,no_of_prods
,prod_id
,cust_id
,desp_id
。
发货表包括:desp_id
,shelfLoc
,quantity
,prod_id
,prod_name
。
我猜是因为我在发货表中没有sale_id
,我需要先添加它并将其作为外键,但我不确定。
修改
我正在为数据库创建测试数据。他们给我们的模式说我们需要在发货表中包含prod_name
出于某种原因,但我认为我们只需要将它与prod_id
相关联。
好吧也许不是更新。那么它只是一个新的插入发货表吗?我正在将它用于iSQL Plus。对于shelfLoc
,我们被告知使用随机生成器生成随机字符串。那么如何将其链接到触发器? (我希望这是有道理的)
答案 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;
/
请注意,我不得不对您的数据模型做出一些假设,因为您没有提供足够的信息:
修改,同时重新提问,更新标记让我重新阅读了您的问题。你说你想更新DESPATCH表,但我不明白为什么。为什么在下订单之前你会有DESPATCH记录?那么更新有什么?
编辑2:我修改了触发器代码以反映您的回复。