2015-09-04 2 views
0

Я пытаюсь написать триггер в mysql, который запускается после вставки в таблицу. После вставки оно принимает значение из столбца attrValue, где attrType равно 'datetime', и обновляет другой столбец с именем attrMd.После запуска триггера в mysql

Это моя попытка сейчас, но он продолжает говорить, что у меня есть значение синтаксиса в строке 4:

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

Я не могу понять это. Буду признателен за любую оказанную помощь. Спасибо ...

CREATE TRIGGER upd_check BEFORE INSERT ON def_servpath_0001_weatherstation 
FOR EACH ROW 
BEGIN 
DECLARE someString text; 
FOR EACH ROW 
BEGIN 
    IF NEW.atrType = 'datetime' THEN 
     SET @someString := NEW.atrValue; 
    END IF; 
END; 

FOR EACH ROW 
BEGIN 
    IF NEW.atrType <> 'datetime' THEN 
     SET NEW.atrMD = someString; 
    END IF; 
END; 
END;// 

Редактировать Image

+0

я написал после вставки, но перед тем вставкой. Извините ... –

+0

Где вы запускаете триггер? mysql cli/phpmyadmin? и что именно должен делать триггер, его довольно запутанный из данного кода. Пожалуйста, добавьте дополнительную информацию об этом. –

+0

Я запускаю его на phpmyadmin. Предполагается, что триггер обновляет столбец attrMd с объявленной переменной someString. someString принимает значение из столбца attrValue, если заданное условие заполнено ... –

ответ

0

Некоторые моменты, рассмотреть следующие вопросы:

  • Не забудьте изменить DELIMITER опцию в PhpMyAdmin.
  • Важно указать разницу между 9.4. User-Defined Variables (@someString), а локальные переменные 13.6.4.1 Local Variable DECLARE Syntax (someString) - это разные переменные.
  • В нем есть еще несколько инструкций (FOR EACH ROW).
CREATE TRIGGER upd_check BEFORE INSERT ON def_servpath_0001_weatherstation 
FOR EACH ROW 
BEGIN 
DECLARE someString text; 
-- FOR EACH ROW 
BEGIN 
    IF NEW.atrType = 'datetime' THEN 
     SET @someString := NEW.atrValue; 
    END IF; 
END; 

-- FOR EACH ROW 
BEGIN 
    IF NEW.atrType <> 'datetime' THEN 
     SET NEW.atrMD = someString; 
    END IF; 
END; 
END;// 
+0

спасибо за головы, он прошел, но он не работает должным образом, я опубликую изображение, что он должен делать ... –

+0

Я разместил изображение для лучшего вида ... –

+0

Я использую два ' для каждой строки ', потому что не уверен, что' atrType = 'datetime' всегда всегда первый. –

Смежные вопросы