我有两张桌子
我必须创建一个触发器,它会自动更新产品表中给定产品的属性p_qoh。
因此,每次我从行表中插入,更新或删除行时,它都会减少,更新或增加P_QOH属性。
这是迄今为止我所拥有的一切
create or replace trigger TRG_LINE_PRODUCT
after insert update or delete on TBL_CH08_PRODUCT
for each row
begin
答案 0 :(得分:1)
您必须首先了解创建触发器的位置,在这种情况下,目标表是PRODUCT,但是您的软件的逻辑条件告诉我们事件的源表是LINE。
触发器如下所示:
CREATE OR REPLACE Trigger TRG_LINE_PRODUCT
After Insert Or Update Or Delete On LINE
Referencing Old As Old New As New
For Each Row
Declare
Begin
If inserting Then
If :New.p_code Is Not Null Then
Update PRODUCT
Set p_qoh = p_qoh + 1
Where p_code = :New.p_code;
End If;
ElsIf updating Then
If Nvl(:Old.p_code, 'XyZ@') <> Nvl(:New.p_code, 'XyZ@') Then
Update PRODUCT
Set p_qoh = p_qoh - 1
Where p_code = :Old.p_code;
Update PRODUCT
Set p_qoh = p_qoh + 1
Where p_code = :New.p_code;
End If;
ElsIf deleting Then
If :Old.p_code Is Not Null Then
Update PRODUCT
Set p_qoh = p_qoh - 1
Where p_code = :Old.p_code;
End If;
End If;
Exception
When Others Then
Null;
End TRG_LINE_PRODUCT;
触发器知道哪个事件&#34;触发&#34;分别有关键字插入,更新和删除。
对于更新的情况,如果将:new和:old数据与此关键字进行比较,则可以使用一个表单来了解列目标是否更改。