Почему я получаю синтаксическую ошибку при попытке поместить оператор if в триггер? - PullRequest
1 голос
/ 22 марта 2020

Мне нужно вставить разные данные в базу данных с помощью триггера, в зависимости от ранее выполненного обновления таблицы, хотя по какой-то причине я продолжаю получать синтаксическую ошибку. Я проверил много похожих вопросов на мой, но все же мой код кажется нормальным.

Триггер:

DELIMITER $$

CREATE TRIGGER update_history
AFTER UPDATE ON product
FOR EACH ROW
BEGIN
IF OLD.amount - NEW.amount > OLD.amount THEN
    INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
    VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'order');
ELSE
    INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
    VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'update');
END$$

DELIMITER ;

Ошибка:

В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей MySQL версии сервера, на предмет правильного синтаксиса для использования рядом с '' в строке 11

Как я могу это исправить?

1 Ответ

3 голосов
/ 22 марта 2020

Вы пропустили END IF.

Сделайте отступ к своему коду, чтобы его было легко найти.

DELIMITER $$

CREATE TRIGGER update_history
AFTER UPDATE ON product
FOR EACH ROW
BEGIN
    IF OLD.amount - NEW.amount > OLD.amount THEN
        INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
        VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'order');
    ELSE
        INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
        VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'update');
    ENd IF;
END$$

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...