2013-10-27 106 views
1

我嘗試執行觸發器時遇到了一些問題。創建MySQL觸發器時​​出現語法錯誤

這裏是觸發我的MySQL查詢:

delimiter // 
CREATE TRIGGER `aggiornaProduzione` 
BEFORE UPDATE ON `strutture` FOR EACH ROW 
BEGIN 
DECLARE temp bigint; 
IF (tipo=1/*mercato*/ AND old.livello <> new.livello) 
THEN (
    SELECT round(2*livello*livello + 13.8*livello) 
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp; 
    WHILE (temp%6<>0) temp=temp+1; 
    END WHILE; 
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1; 
    ) 
END IF; 
END // 

和錯誤是

#1064 - 你在你的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以找到在';'附近使用的正確語法。 WHILE(temp%6 <> 0)temp = temp + 1; END WHILE; UPDATE strutture SET'at line 8

有人有一個想法,爲什麼我得到這個錯誤?

回答

2

刪除圍繞您的THEN子句的括號。此外,您的WHILE從句語法不正確:

delimiter // 
CREATE TRIGGER `aggiornaProduzione` 
BEFORE UPDATE ON `strutture` FOR EACH ROW 
BEGIN 
DECLARE temp bigint; 
IF (tipo=1/*mercato*/ AND old.livello <> new.livello) 
THEN 
    SELECT round(2*livello*livello + 13.8*livello) 
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp; 
    WHILE temp%6<>0 DO 
     SET temp=temp+1; 
    END WHILE; 
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1; 
END IF; 
END // 
+0

it'sstill不工作,同樣的錯誤 #1064 - 你有一個錯誤的SQL語法;檢查與您的MySQL服務器版本相對應的手冊,以找到在「temp = temp + 1」附近使用的正確語法; END WHILE; UPDATE strutture SET produzione = temp WHERE cit'at line 9 – Sanci

+0

@Sanci:好吧,對於一個開始*不是*相同的錯誤。現在你需要看看WHILE子句:特別是它應該是WHILE temp%6 <> 0 DO SET temp = temp + 1; END WHILE;'。看我的編輯。 – eggyal

+0

是的,我們接近解決方案。現在,我想這是最後一個錯誤,因爲它在最後一行: #1064 - 你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第14行'//'附近使用正確的語法。 – Sanci