2013-06-01 97 views
1

那麼這裏更新庫存的問題......我想在我的數據庫,其中包括我怎樣才能使用TRIGGER

Sale(ProductID,Quantity,Price)     
Invlevel(ProductID,Quantity) 

我希望使用觸發器,此更新更新庫存表。我必須使用2個觸發器(我認爲)。 1,在銷售表,這將是這樣的

CREATE TRIGGER `sale_AINS` AFTER INSERT ON sale FOR EACH ROW 
begin 
update Invlevel set quantity = Invlevel.quantity-"sale.quantity" where 
Invlevel.ProductID = "sale.ProductID"; 
END 

這個觸發器,當銷售出現,我想調整在該銷售來到了產品的庫存水平。然而,即使這個觸發器沒有錯誤,並且在我插入銷售表時不能正常運行,它也不會在Invlevel表中進行任何更改,我不知道爲什麼(:@)。

而且,我在Invlevel表像

CREATE TRIGGER `invlevel_AUPD` after UPDATE on invlevel FOR EACH ROW 
if invlevel.quantity < 20 
begin 
insert into orders 
(select productid,amount from reorder where reorder.productid = invlevel.productid) 
end 

*由觸發器(訂單,訂貨是其他表)

這對我說:我有我不知道語法錯誤它是什麼,甚至即使我找到它我甚至無法檢查邏輯,因爲其他觸發器甚至不能正常工作......任何關於它的想法或幫助將非常有幫助。

回答

3

嘗試

首先觸發

CREATE TRIGGER sale_AINS 
AFTER INSERT ON sale 
FOR EACH ROW 
    UPDATE invlevel 
    SET quantity = quantity - NEW.quantity 
    WHERE productid = NEW.productid; 

在這種觸發你不需要BEGIN END塊,因爲只有一個聲明。爲了訪問列值或插入的行,您需要使用NEW關鍵字。

,第二個

DELIMITER $$ 
CREATE TRIGGER invlevel_AUPD 
AFTER UPDATE ON invlevel 
FOR EACH ROW 
BEGIN 
    IF NEW.quantity < 20 THEN 
    INSERT INTO orders (productid, amount) 
    SELECT productid, amount 
     FROM reorder 
    WHERE productid = NEW.productid; 
    END IF; 
END$$ 
DELIMITER ; 

在第二個觸發IF聲明是出於BEGIN END塊和語法IF的是錯誤的。它應該是IF ... THEN ... END IF;。和NEW關鍵字一樣的問題。

這裏是SQLFiddle演示

你可以把你IF條件爲WHERE條款,使其更簡潔這樣

CREATE TRIGGER invlevel_AUPD 
AFTER UPDATE ON invlevel 
FOR EACH ROW 
    INSERT INTO orders (productid, amount) 
    SELECT productid, amount 
    FROM reorder 
    WHERE productid = NEW.productid 
    AND NEW.quantity < 20; 

這裏更新SQLFiddle演示

+0

謝謝你真的很有幫助 – user2432398

+0

@ user2432398不客氣。我很高興它幫助:) – peterm