2017-03-09 74 views
-1

我有兩個表創建觸發器,當行插入,刪除或更新,將更新上表中的屬性

  • 線(inv_number line_num P_CODE line_units line_price)
  • 產品(P_CODE P_desit _P_indate P_qoh P_min P_price p_dicount v_code P_min_order P_Reorder

我要創建一個觸發器,它會自動給定產品更新產品表中的屬性p_qoh。

因此,每當我從行表中插入,更新或刪除一行時,它都會減少,更新或增加P_QOH屬性。

這是我至今

create or replace trigger TRG_LINE_PRODUCT 
after insert update or delete on TBL_CH08_PRODUCT 
for each row 
begin 
+2

不知道你的問題是什麼,但該手冊有很多你可以學習的例子。 – mustaccio

回答

1

您必須首先了解在哪裏創建觸發器,在這種情況下,目標表的產品,但你的軟件的邏輯條件告訴我們,源表的事件是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, '[email protected]') <> Nvl(:New.p_code, '[email protected]') 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; 

觸發知道哪些事件「觸發」,有關鍵字插入,更新和刪除分別。

對於更新的情況,通過比較新:和舊數據與這個關鍵字來確定列目標是否發生變化的一種形式。