#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.