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;

トリガーはさらに 1 つのレコードを挿入@countしてから 2 に増やし、while 条件はこれ以上保持されず ( WHILE(@count<=NEW.installments))、トリガーは終了します。

トリガーによってNEW.installments = 1. この追加の行に対して、トリガーが再度実行され、もう 1 行が挿入され、これが永遠に続きます。

于 2012-09-10T07:41:14.293 に答える