Синтаксическая ошибка в триггере - PullRequest
0 голосов
/ 22 апреля 2011

У меня проблемы с созданием триггера 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

Большое спасибо за просмотр!

Ответы [ 2 ]

1 голос
/ 22 апреля 2011
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 голосов
/ 22 апреля 2011
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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...