我目前有一个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;
答案 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 ;