2014-09-04 46 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

回答