2016-03-02 65 views
0

我目前有一个php脚本,它从一个表(活动)中删除记录并将其插入到另一个表(归档/历史记录)中。AFTER DELETE事件触发器上的MySQL'CASE'语法

这样,我正在写一个事件触发器,它会将相同的记录再次插入到活动表(它是一个重复出现的任务),然后根据同一记录中的另一个字段“优先级”更新记录的“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; 
+0

澄清表名称为“任务”,PK为“taskName”。 – LoMine

+0

你能给我们完整的“CREATE”存储过程吗?我明白taskName是PK。另一个taskName在=的右边呢?另外你的分隔符是什么?我可能是错的,但据我所知,分隔符应该在(BEGIN和END之间)和(BEGIN和END之外)之间有所不同。例如,'taskName = taskName;'和'END;'应该有不同的分隔符。 – Tin

+0

我正在使用Adminr 3.3.3,当创建事件触发器时,它会为初始触发器语法提供一些下拉输入形式,其中参数为Time,Event和Type,表示(BEFORE/AFTER),(INSER,UPDATE ,删除)和(对于每行)。生成的原始语法如下所示: DELIMITER ;; CREATE TRIGGER'Tasks_ad' AFTER DELETE ON'Tasks' FOR EACH ROW BEGIN \t // SQL语句和逻辑 END ;; DELIMITER; – LoMine

回答

0

你缺少BEGIN一端。您需要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 ; 
+0

此语法会引发错误:**查询中出现错误:';'附近出现语法错误; DELIMITER'在第15行**。即使我手动将分隔符号更改为$$,它也会在第16行引发​​相同的错误**查询中出现错误:第16行**处的'DELIMITER'附近出现语法错误。 – LoMine

+0

我的坏,错字,我做了两个BEGINs :(更新了答案。 – Tin

+1

工作!感谢您的帮助,对于事件触发器来说很新颖,我还没有100%的语法。 – LoMine