【发布时间】:2014-09-04 14:43:17
【问题描述】:
1) 我有一张桌子programs。
2) 我有 PROCEDURE 用于更改此表:
CREATE PROCEDURE update_lessons_ord (IN courseId INT)
BEGIN
SET @ord :=0;
UPDATE programs mcp_1
INNER JOIN programs mcp_2 ON mcp_1.id = mcp_2.id
SET mcp_1.ord = ( @ord := @ord +1 )
WHERE mcp_2.course_id = courseId;
END;
3) 我有第一个TRIGGER(删除):
CREATE TRIGGER `update_lessons_ord_after_delete` AFTER DELETE ON `programs`
FOR EACH ROW
BEGIN
CALL update_lessons_ord(OLD.course_id);
END;
它工作正常!
4) 我有第二个 TRIGGER(插入):
CREATE TRIGGER `update_lessons_ord_after_insert` AFTER INSERT ON `programs`
FOR EACH ROW
BEGIN
CALL update_lessons_ord(NEW.course_id);
END;
它工作错误:“无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用”。
在这种情况下我该如何使用我的PROCEDURE?
【问题讨论】:
-
能贴出存储过程的代码吗?
-
在这两种情况下都会产生错误,这里有一个SQL Fiddle的例子。
标签: mysql sql stored-procedures triggers