MySQL Workbench — » » недопустимо в этой позиции для этой версии сервера

#mysql #sql #triggers #mysql-workbench

#mysql #sql #срабатывает #mysql-workbench

Вопрос:

Я работаю над изучением того, как создавать триггеры в SQL с использованием MySQL workbench и MySQL server. Предполагается, что триггер обновляет баланс клиента в таблице CUSTOMER, когда в таблицу INVOICE вводится новый счет. У меня есть следующий код:

 CREATE TRIGGER trg_updatecustbalance
AFTER INSERT ON INVOICE
FOR EACH ROW
BEGIN
    UPDATE CUSTOMER
    SET CUST_BALANCE = CUST_BALANCE   :NEW.INVOICE_AMOUNT
    WHERE CUST_NUM = :NEW.CUST_NUM
END;
  

Насколько я могу судить, все для этого триггера установлено правильно, но я получаю сообщение об ошибке при » » в SET CUST_BALANCE = CUST_BALANCE :NEW.INVOICE_AMOUNT . Я не смог найти в Интернете ничего, что объясняло бы, почему я получаю эту конкретную ошибку.

Мы высоко ценим вашу помощь!

Комментарии:

1. Я бы ожидал, что вы получите сообщение об ошибке из-за : s перед NEW .

2. @Nick Я следовал руководству, которое я нашел в Интернете, в котором перед NEW было двоеточие. Когда я удаляю двоеточия, я затем получаю сообщение об ошибке END с надписью «Ожидалось ‘;’ но вместо этого найдено END».

3. Да, вам нужен ; в конце UPDATE инструкции, т.Е. WHERE CUST_NUM = NEW.CUST_NUM; . Обратите внимание, что затем вы можете столкнуться с проблемой с разделителями, требующими использования DELIMITER $$ или аналогичных перед попыткой определения триггера.

4. Потрясающе! Большое спасибо. Я добавил разделитель $$, а затем добавил точку с запятой в конце инструкции update, и теперь это работает. Спасибо за вашу помощь!

5. @nick вы должны опубликовать свое решение в качестве ответа, и ekelly должен это принять. Вот как работает репутация StackOverflow.