2013-04-18 156 views
-1
過程中得到了MySQL錯誤

亞姆喜MySQL的新觸發..這是我的第一個觸發..讀音字試圖運行,但得到這個錯誤當創建觸發器

您的SQL語法錯誤;檢查手冊, 對應於您的MySQL服務器版本的正確語法使用 'DECLARE x INT; SET x = new.product_price - old.product_price; INSERT到」第9行

delimiter $$ 

CREATE TRIGGER product_update 

BEFORE update ON w3xab_virtuemart_product_prices 
FOR EACH ROW 
BEGIN 

IF (new.product_price <> old.product_price) 
THEN 

    DECLARE x decimal(10,2) default 0; 
    SET x = new.product_price - old.product_price; 
    INSERT into product_price_log(virtuemart_product_id, old_product_price, new_product_price, product_price_update, price_update_date) 
    VALUES (new.virtuemart_product_id, old.product_price, new.product_price, new.x, curtime()); 


END IF; 
END$$ 

delimiter ; 

回答

1

DECLARE只允許在BEGIN ... END複合語句,並且必須是在它的開始,任何其他語句之前。

因此,在BEGIN之後移動DECLARE。

+0

真棒傑克由於使用INSERT INTO product_price_log ..working罰款...但很多 – user1781038

+0

傑克IAM當我使用更新product_price_log 集virtuemart_product_id = new.virtuemart_product_id, 集old_product_price = old.product_price, 集new_product_price =新。 product_price, set product_price_update = x, set price_update_date = CURDATE();它會給這個...#1064 - 你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第11行設置old_product_price = old.product_price, set new_product_price = new.product',以便在正確的語法附近使用.....希望您不介意 – user1781038

+0

只能使用一個' SET',就像''update product_price_log set virtmart_product_id = new.virtuemart_product_id,old_product_price = old.product_price,new_product_price = new.product_price,product_price_update = x,price_update_date = CURDATE();' – Jack