Ошибка триггера MySQL / MariaDB

#mysql #triggers #insert

#mysql #триггеры #вставить

Вопрос:

MariaDB версии 10.1.16. Я не могу найти, в чем проблема в приведенном ниже триггере:

 DROP TRIGGER IF EXISTS `insert_customer`;
DELIMITER |
CREATE TRIGGER `insert_customer` AFTER INSERT ON `installations`
FOR EACH ROW BEGIN
    DECLARE customerId INT DEFAULT NULL;
    DECLARE versionCode INT DEFAULT NULL;
    SELECT c.`id`, c.`version_code` INTO @customerId, @versionCode FROM `customers` c WHERE c.`phone` = NEW.`phone`;

    IF @customerId IS NULL THEN
        INSERT INTO `customers` (`phone`, `imei`, `platform`, `version_code`, `created`, `modified`) VALUES (NEW.`phone`, NEW.`imei`, NEW.`platform`, NEW.`version_code`, NOW(), NOW());
    ELSEIF NEW.`version_code` > @versionCode THEN
        UPDATE `customers` SET `version_code` = NEW.`version_code` WHERE `id` = @customerId;
    END IF;
END;|
DELIMITER ;
  

Рядом с надписью 1064 — синтаксическая ошибка, ЗАТЕМ ВСТАВИТЬ, но я уверен, что проблема в другом месте. Пожалуйста, помогите.

Комментарии:

1. будьте осторожны с ошибкой 1172 при выборе stmt… INTO @customerId, @versionCode

2. @Drew: ошибка 1172 невозможна, потому что customers.phone имеет уникальное ограничение 🙂 Я получаю ошибку 1064 рядом с INSERT. Есть идеи? TIA.

3. если вы предоставите инструкции create table, которые помогли бы, и точное сообщение об ошибке. Это если перевод версии продукта maria не очень старый (большинство из нас не использует maria). Так что, возможно, это проблема с версией. Кто-то должен иметь возможность попытаться воссоздать это для вас, если ничего очевидного не выскакивает.