我已经阅读了很多关于此错误的文章,但似乎没有找到解决我的问题的方法。
据我了解,我的代码中没有无限循环或递归触发器调用。但我仍然不断收到此错误(1442)。我已经阅读了很多关于触发器如何起作用以及偶然制作递归触发器系统是多么容易,但我不明白错误在哪里。此外,人们错误地在启动触发器的同一行上使用了 INSERT/UPDATE,在我的情况下并非如此。
我怎么解决这个问题?如果您有任何具体问题,请务必问我。我真的很挣扎,需要帮助 - 期待回复
这是我的触发器和过程:(只是提到我不使用任何 DELIMITER,因为我使用的是 MySQL Workbench,并且没有必要在那里使用 DELIMITER)
1)触发:
BEFORE INSERT ON `dim_content` FOR EACH ROW
BEGIN
INSERT INTO sequence (increment) VALUE (new.sys_increment);
END
2)触发:
BEFORE INSERT ON `sequence` FOR EACH ROW
BEGIN
DECLARE z INT(15);
DECLARE w VARCHAR(10);
SET z = NEW.increment;
CALL alpha_numeric(z, w);
UPDATE dim_content SET content_id = w WHERE sys_increment = z;
END
3) 程序 alpha_numeric():
PROCEDURE `alpha_numeric`(INOUT x INT(7), OUT y VARCHAR(10))
BEGIN
DECLARE y CHAR(7);
WHILE EXISTS(SELECT * FROM sequence WHERE increment = x) DO
SET x = x+1;
END WHILE;
IF (x < 9999) THEN
BEGIN
SET y = CONCAT('A', convert(x, CHAR(4)));
END;
/* There are more elif statements but that's not point of the problem */
END;
我的逻辑的实际顺序如下:
INSERT INTO dim_content -> 在 dim_content 上触发 BEFORE INSERT -> INSERT INTO 序列 -> 在序列上触发 BEFORE INSERT -> CALL alpha_numeric() -> 在序列上触发 BEFORE INSERT(继续)-> 更新 dim_content