2011-04-22 12 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에서 유효한 함수 이름입니까? –

+0

그래, 나는 그것을 MySQL 문서에서 발견하고 그것을 테스트했다. 또한 TRUNCATE()에 대한 첫 번째 호출은 문제를 일으키지 않습니다. 두 번째 호출을 ROUND()와 같은 다른 함수로 대체하려고 시도했지만 여전히 동일한 오류가 발생했습니다. – ksol

답변

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

-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

관련 문제