Я работаю над тем, чтобы научиться создавать триггеры в SQL, используя MySQL workbench и сервер MySQL. Предполагается, что триггер обновляет баланс клиента в таблице 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. Я не смог найти в Интернете ничего, что говорило бы о том, почему я получаю эту конкретную ошибку.
Ваша помощь очень ценится!
@Nick Я следил за учебным пособием, которое я нашел в Интернете, в котором перед NEW стояло двоеточие. Когда я убираю двоеточие, я получаю сообщение об ошибке END с надписью «Ожидается ';' но вместо этого нашел END."
Да, вам нужен ; в конце утверждения UPDATE, то есть WHERE CUST_NUM = NEW.CUST_NUM;. Обратите внимание, что вы можете столкнуться с проблемой с разделителями, требующими использования DELIMITER $$ или аналогичного, прежде чем пытаться определить триггер.
Потрясающий! Большое спасибо. Я добавил разделитель $$, а затем добавил точку с запятой в конце оператора обновления, и теперь он работает. Спасибо за вашу помощь!
Здорово. Рад, что смог помочь.
@nick, вы должны опубликовать свое решение в качестве ответа, и ekelly должен принять это. Вот как работает репутация StackOverflow.
@MikeLischke Я проголосовал за закрытие как опечатку. Я не вижу, что этот вопрос может помочь кому-то еще. Лучше просто получить roomba'd






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