2011-04-22 67 views
0

我在創建MySQL(5.1)觸發器時遇到了問題,我真的沒有看到我在這裏做錯了什麼。下面的代碼:觸發器中的語法錯誤

DELIMITER // 
CREATE TRIGGER CheckSoftware BEFORE INSERT ON Software 
FOR EACH ROW BEGIN 
    -- Uppercase the first letter 
    SET NEW.name = CONCAT(UPPER(SUBSTRING(NEW.name, 1, 1)), SUBSTRING(NEW.name, 2)); 

    -- If price isn't round 
    IF NEW.price != TRUNCATE(NEW.price) THEN 
     IF NEW.price - TRUNCATE(NEW.price) <= 0.49 THEN 
      -- Sets it to xx.49 
      SET NEW.price = TRUNCATE(NEW.price) + 0.49; 
     ELSIF (NEW.price - TRUNCATE(NEW.price)) <= 0.99 THEN 
      -- Sets it to xx.99 
      SET NEW.price = TRUNCATE(NEW.price) + 0.99; 
     END IF; 
    END IF; 
END; 
// 
DELIMITER ; 

什麼的MySQL拋出我的臉:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') THEN 
     IF NEW.price - TRUNCATE(NEW.price) <= 0.49 THEN  
    ' at line 7 

非常感謝看着它!

+1

'TRUNCATE'在'MySQL'中絕對是一個有效的函數名稱,而不只是用於清空表? – 2011-04-22 16:45:38

+0

是的,我在MySQL文檔中找到它,並對其進行測試。另外,第一次調用TRUNCATE()似乎不會造成任何麻煩。我嘗試用其他函數(如ROUND())替換第二個調用,並且仍然出現相同的錯誤。 – ksol 2011-04-22 16:47:48

回答

1
DELIMITER // 
    CREATE TRIGGER CheckSoftware BEFORE INSERT ON Software 
    FOR EACH ROW BEGIN 
     -- Uppercase the first letter 
     SET NEW.name = CONCAT(UPPER(SUBSTRING(NEW.name, 1, 1)), SUBSTRING(NEW.name, 2)); 

     -- If price isn't round 
     IF NEW.price != TRUNCATE(NEW.price,2) THEN 
      IF NEW.price - TRUNCATE(NEW.price,2) <= 0.49 THEN 
       -- Sets it to xx.49 
       SET NEW.price = TRUNCATE(NEW.price,2) + 0.49; 
      ELSIF (NEW.price - TRUNCATE(NEW.price,2)) <= 0.99 THEN 
       -- Sets it to xx.99 
       SET NEW.price = TRUNCATE(NEW.price,2) + 0.99; 
      END IF; 
     END IF; 
    END; 
    // 

DELIMITER ; 

截斷功能使用兩個參數!

+0

非常感謝,我錯過了。也讓我看到我想用的是FLOOR(),而不是TRUNCATE()。 – ksol 2011-04-22 16:57:24

-1
DELIMITER # 

CREATE TRIGGER CheckSoftware BEFORE INSERT ON Software 
FOR EACH ROW BEGIN 
    SET NEW.name = CONCAT(UPPER(SUBSTRING(NEW.name, 1, 1)), SUBSTRING(NEW.name, 2)); 
    IF NEW.price != TRUNCATE(NEW.price) THEN 
     ... 
    END IF; 
END # -- end of create trigger 

DELIMITER ; 

編輯 - 區別:

... 
END; <---- 
# -- end of create trigger 


DELIMITER ; 
+0

除了使用#作爲分隔符代替//,我沒有看到區別..有沒有?順便說一句,使用#不能解決我的問題 – ksol 2011-04-22 16:52:40