gpt4 book ai didi

AFTER DELETE 事件触发器上的 MySQL 'CASE' 语法

转载 作者:行者123 更新时间:2023-11-29 21:20:17 25 4
gpt4 key购买 nike

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

通过这个,我正在编写一个事件触发器,它将再次将相同的记录插入到事件表中(它是一个重复发生的任务),然后根据同一记录中的另一个字段“优先级”更新记录的“到期日期”字段。

我已经完成了 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;

最佳答案

您缺少一个 END 来代替 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 ;

关于AFTER DELETE 事件触发器上的 MySQL 'CASE' 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com