2014-04-18 142 views
0

我試圖在product_inv更新但我的代碼未運行時更新產品表格。請幫我這個使用觸發器更新表格

create table Product 
(   
     P_ID varchar2(10) constraint cat_pk PRIMARY KEY, 
     P_name varchar2(15) constraint Cat_unqnn UNIQUE NOT NULL, 
     P_Brand varchar2(15) CHECK(P_Brand IN('Yes', 'No')), 
     P_Cost varchar2(6), 
     P_qty number  
); 

insert into product values('10', 'Coke', 'Yes', '34', '8'); 
insert into product values('20', 'Pepsi', 'No', '25', '6'); 


create table Product_Inv 
( 
     P_ID varchar2(5) REFERENCES Product(P_ID),   
     Rate varchar2(5) constraint prodcut_rate_nn NOT NULL,   
     Qty number constraint prodcut_qty_nn NOT NULL, 
     Discount varchar2(15), 
     Lot_ExpiryDate varchar2(10)   
); 

create or replace trigger Product 
AFTER insert or update or delete on Product_Inv 
for each row 

begin 
    UPDATE Product 
     SET p_qty = p_qty + new.Qty 
     WHERE p_id = new.p_id; 

end; 

在此之後插入的項目10將以前的8 + 9這樣的,但有一些錯誤。

insert into Product_inv values('10', '25', '9', '25', '19-8-2014'); 
+0

什麼錯誤? –

+0

插入到Product_inv後,您在產品表中獲得了什麼? –

+0

觸發無效,失敗重新驗證! – Tabani

回答

0

你的問題是在觸發代碼: 你必須使用一個「:」在新的面前。

所以不是這部分代碼:

UPDATE Product 
     SET p_qty = p_qty + new.Qty 
     WHERE p_id = new.p_id; 

你需要把這個部分:

UPDATE Product 
     SET p_qty = p_qty + :new.Qty 
     WHERE p_id = :new.p_id;