我正在使用以下代码:
DELIMITER $$
DROP TRIGGER IF EXISTS after_insert_temp_ecs $$
CREATE
TRIGGER `after_insert_temp_ecs` AFTER insert ON `ecs`
FOR EACH ROW BEGIN
set @count =1;
WHILE(@count<=NEW.installments) THEN
insert into temp_ecs (amount_temp,_date_temp,id,name,installments) values(NEW.amount,(date_add(NEW._date,interval @count month)),NEW.id,NEW.name,NEW.installments);
set @count=@count+1;
END WHILE;
END;
$$
DELIMITER ;
但是当我使用它时无限循环执行。代码中的错误是什么
答案 0 :(得分:1)
我们假设NEW.installments = 1
。现在考虑这个块
set @count =1;
WHILE(@count<=NEW.installments) THEN
insert into temp_ecs (amount_temp,_date_temp,id,name,installments) values(NEW.amount,(date_add(NEW._date,interval @count month)),NEW.id,NEW.name,NEW.installments);
set @count=@count+1;
END WHILE;
触发器将再插入一条记录,然后@count
将增加到2,while条件将不再保持(WHILE(@count<=NEW.installments)
)并且触发器将完成。
请注意,触发器插入了一个新行,NEW.installments = 1
。对于这个额外的行,触发器将再次运行,将再插入一行,并且这将永远持续下去。