Как правильно выполнить Trigger? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь выполнить триггер, но сталкиваюсь с ошибкой:

Если одна запись вставляется в регистрационную таблицу, в то же время я проверяю, имеет ли эта запись referal_code или нет.Если запись, имеющая referal_code, тогда я должен вставить поля master_id, district_id, taluka_id и assign_to, которые находятся в другой таблице (franchisee_code).

, для этого случая я пишу следующий триггер

CREATE DEFINER=`root`@`localhost` TRIGGER `assign_to` AFTER INSERT ON `registration` FOR EACH ROW BEGIN IF (SELECT master_id,district_id,taluka_id,assign_to FROM franchisee_code WHERE franchisee_code.referal_code=NEW.referal_code) THEN UPDATE registration SET NEW.master_id =franchisee_code.master_id,NEW.district_id =franchisee_code.district_id,NEW.taluka_id =franchisee_code.taluka_id,NEW.assign_to =franchisee_code.assign_to WHERE NEW.id=NEW.id; END

, но отображается следующая ошибка

Следующий запрос не выполнен:

"CREATE DEFINER=`root`@`localhost` TRIGGER `assign_to` AFTER INSERT ON `registration` FOR EACH ROW BEGIN SELECT master_id,district_id,taluka_id,assign_to FROM franchisee_code WHERE franchisee_code.referal_code=NEW.referal_code; UPDATE registration SET NEW.master_id =franchisee_code.master_id,NEW.district_id =franchisee_code.district_id,NEW.taluka_id =franchisee_code.taluka_id,NEW.assign_to =franchisee_code.assign_to WHERE NEW.id=NEW.id END"  

MySQL сказал: # 1064 - в синтаксисе SQL имеется ошибка;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с 'END' в строке 5

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Ваш триггер должен выглядеть примерно так:

DROP TRIGGER IF EXISTS assign_to ;
DELIMITER$$
CREATE TRIGGER assign_to AFTER INSERT ON registration
FOR EACH ROW 
BEGIN

  SET @masterId := 0;
  SET @districtId := 0;
  SET @talukaId := 0;
  SET @assignTo := 0;
    SELECT master_id ,district_id, taluka_id , assign_to 
    INTO @masterId, @districtId,@talukaId,@assignTo 
    FROM franchisee_code 
    WHERE franchisee_code.referal_code = NEW.referal_code;

   IF @masterId > 0 THEN
       UPDATE registration 
    SET NEW.master_id = @masterId, 
    NEW.district_id = @districtId, 
    NEW.taluka_id = @talukaId, 
    NEW.assign_to = @assignTo 
    WHERE NEW.id=NEW.id ;
   END IF;
 END$$

Но если вы попытаетесь обновить ту же строку, которую вы ввели, mysql не позволит вам это сделать.

Демо

0 голосов
/ 12 октября 2018

Вам не хватает конца, если;и вы не можете устанавливать разделители, см. https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html. Также вы не можете обновить таблицу, которая запустила триггер в триггере.Вы можете обновить NEW.значения в триггере до, но не в триггере после.

...