2014-09-04 62 views
0

1)我有一些表programsMysql:在一个流程中的INSERT过程+触发器

2)我有此表中改变程序

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; 

它的工作原理错误:“因为它已经使用由调用这个存储声明不能在存储函数/触发更新表功能/触发器“。

如何在这种情况下使用我的程序

+0

您可以发布存储过程的代码吗? – wchiquito 2014-09-04 15:01:19

+0

@wchiquito张贴。 – 2014-09-04 15:03:14

+0

在这两种情况下都会生成错误,下面是一个[SQL小提琴](http://sqlfiddle.com/#!2/af25ec/2)示例。 – wchiquito 2014-09-04 16:09:42

回答