2017-01-09 5 views
1

У меня есть один запрос SQLSQL запрос нижеперечисленным

CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_vacation_mode` AFTER UPDATE ON `oc_ms_seller` 
FOR EACH ROW 
BEGIN 
if NEW.vacation_mode <> OLD.vacation_mode THEN 

    UPDATE `oc_product` AS p 
    SET p.date_modified = NOW() 
    WHERE p.product_id IN (SELECT DISTINCT product_id FROM `oc_ms_seller` AS ms join 
    `oc_ms_product` AS mp ON ms.seller_id = mp.seller_id) 

END IF; 
END; 

Я получаю эту ошибку, когда выполняется

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END IF 
END' at line 11 

ответ

0

Вам необходимо переопределить ограничитель по умолчанию (;)

DELIMITER // 

CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_vacation_mode` AFTER UPDATE ON `oc_ms_seller` 
FOR EACH ROW 
BEGIN 
if NEW.vacation_mode <> OLD.vacation_mode THEN 

    UPDATE `oc_product` AS p 
    SET p.date_modified = NOW() 
    WHERE p.product_id IN (SELECT DISTINCT product_id FROM `oc_ms_seller` AS ms join 
    `oc_ms_product` AS mp ON ms.seller_id = mp.seller_id); 

END IF; 
END// 

DELIMITER ; 

DELIMITER оператор изменяет стандартный разделитель, который является точкой с запятой (;) к другому (здесь //).

+0

получение ошибки # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с END IF; END 'в строке 11 –

+0

ошибка в END IF; END; –

+0

Попробуйте теперь не должно быть точкой с запятой после конца – jophab

0

Добавить ; в конце вашего внутреннего запроса UPDATE....

Вам необходимо завершить внутренний запрос внутри оператора IF.

CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_vacation_mode` AFTER UPDATE ON `oc_ms_seller` 
FOR EACH ROW 
    BEGIN 
     if NEW.vacation_mode <> OLD.vacation_mode THEN 

      UPDATE `oc_product` AS p 
      SET p.date_modified = NOW() 
      WHERE p.product_id IN (SELECT DISTINCT product_id FROM `oc_ms_seller` AS ms join 
       `oc_ms_product` AS mp ON ms.seller_id = mp.seller_id); 
     END IF; 
    END; 
+0

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

+0

Вы отправляете запрос внутри sql cli? – cb0

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

  • Нет связанных вопросов^_^