2015-04-30 5 views
0

Прошу прощения, если этот вопрос задан миллион раз!My SQL Trigger Before Update

Таким образом, я пытаюсь создать триггер на таблице, когда работнику назначена задача, когда pick_date обновляется, чтобы показать это. Он должен обновлять только поле даты, если оно равно null. Номер заказа, сотрудник и order_pick_date находятся в одной таблице.

У меня есть следующий триггер, но я не могу заставить его работать.

CREATE TRIGGER pickDate BEFORE UPDATE 
ON order_master 
FOR EACH ROW BEGIN 
UPDATE order_master SET NEW.order_pick_date = IFNULL(SYSDATE(),) WHERE order_master.order_no = old.order_no 
END; 
+0

Какие ошибки вы получаете? Для начала - синтаксис 'IFNULL' неверен: второго параметра нет. – npe

+0

Пробовал без IFNULL и получить ERROR 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашему серверу MySQL версии для корректного синтаксиса использовать вблизи «END» в строке 5 –

ответ

0

A before update триггер в порядке. Вы просто не хотите делать update. Просто установите значение на new записи:

CREATE TRIGGER pickDate BEFORE UPDATE 
ON order_master 
FOR EACH ROW BEGIN 
    SET NEW.order_pick_date = COALESCE(old.order_pick_date, now()) ; 
END; 

Есть некоторые другие вопросы (например, как getdate() быть синтаксис SQL Server), но я думаю, что это то, что вы собираетесь.

+0

Так что я попытался ниже: разделители // CREATE TRIGGER pickDate ПЕРЕД UPDATE НА order_master ДЛЯ КАЖДОЙ ROW НАЧАТЬ SET NEW.order_pick_date = COALESCE (old.order_pick_date, now()); END // DELIMTER; И я получаю: ERROR 1064 (42000): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL , для правильного синтаксиса для использования рядом с END // Любая идея почему? –

+0

UPDATE - Помогло бы, если бы я правильно сформулировал DELIMITER ... –

+0

Спасибо за помощь Гордон, я запомню это на будущее. :) –