0

我正在使用以下代码:

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 ;

但是当我使用它时无限循环执行。代码中的错误是什么

4

1 回答 1

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. 对于这一额外的行,触发器将再次运行,将再插入一行,这将永远持续下去。

于 2012-09-10T07:41:14.293 回答