MySQL' CASE' AFTER DELETE事件触发器

时间:2016-03-02 14:53:52

标签: mysql events triggers

我目前有一个php脚本,它从一个表中删除一条记录(活动)并将其插入另一个表(存档/历史记录)。

这样我就编写了一个事件触发器,它会将相同的记录再次插入活动表(它是一个重复发生的任务),然后更新记录" duedate"基于另一个领域"优先级"在同一记录中。

我已经完成了php脚本的所有逻辑,问题在于我的事件触发器中的语法。错误状态"''附近的语法错误第14行SQL命令" 。 (最后声明)。此语法也将更新表中的所有记录或仅更新复制的记录吗?

此处触发语法:

BEGIN

 INSERT INTO Tasks SELECT * FROM Tasks where taskName=taskName;

  UPDATE Tasks

  SET DueDate =

   CASE

    WHEN Priority = 'Daily' THEN DATE_ADD(DueDate, INTERVAL 1 DAY)

    WHEN Priority = 'Weekly' THEN DATE_ADD(DueDate, INTERVAL 7 DAY)

    WHEN Priority = 'Monthly' THEN DATE_ADD(DueDate, INTERVAL 1 MONTH)

    WHEN Priority = 'Quarterly' THEN DATE_ADD(DueDate, INTERVAL 3 MONTH)

    WHEN Priority = 'Bi-Yearly' THEN DATE_ADD(DueDate, INTERVAL 6 MONTH)

    WHEN Priority = 'Annually' THEN DATE_ADD(DueDate, INTERVAL 1 YEAR)

   ELSE DueDate

END;

1 个答案:

答案 0 :(得分:0)

你缺少一个BEGIN的END。你需要2个END,一个用于CASE,另一个用于BEGIN。

DELIMITER ;; 
CREATE TRIGGER Tasks_ad AFTER DELETE ON Tasks FOR EACH ROW 
BEGIN
    INSERT INTO Tasks SELECT * FROM Tasks where taskName=taskName;
    UPDATE Tasks
    SET DueDate =
        CASE
            WHEN Priority = 'Daily' THEN DATE_ADD(DueDate, INTERVAL 1 DAY)
            WHEN Priority = 'Weekly' THEN DATE_ADD(DueDate, INTERVAL 7 DAY)
            WHEN Priority = 'Monthly' THEN DATE_ADD(DueDate, INTERVAL 1 MONTH)
            WHEN Priority = 'Quarterly' THEN DATE_ADD(DueDate, INTERVAL 3 MONTH)
            WHEN Priority = 'Bi-Yearly' THEN DATE_ADD(DueDate, INTERVAL 6 MONTH)
            WHEN Priority = 'Annually' THEN DATE_ADD(DueDate, INTERVAL 1 YEAR)
        ELSE DueDate
        END;
END;;
DELIMITER ;