【发布时间】:2017-09-06 13:58:48
【问题描述】:
我已经阅读了很多关于这个错误的文章,但似乎没有找到解决我的问题的方法。
据我所知,我的代码中没有无限循环或递归触发器调用。但我仍然不断收到此错误(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() -> 在序列上触发之前插入(继续)-> UPDATE dim_content
【问题讨论】:
-
完整的错误信息是什么?
-
错误 1442:1442:无法更新存储函数/触发器中的表“dim_content”,因为它已被调用此存储函数/触发器的语句使用。但我无法理解它,因为一开始我插入到表中,然后我更新了它,我没有一个更新触发器可以使它递归
标签: mysql stored-procedures recursion triggers mysql-error-1442