每当列“AISTATUS”更改为值“TRIGGER REQUIRED”时,我一直在尝试编写一个事件触发器来更新表。我无法获取触发器来引用两个单独的表来提取我需要的值,因此我选择使用事件。唯一的问题是我在第 1 行收到语法错误:1064,但我很难理解为什么会出现错误或错误在哪里。
DELIMITER //
CREATE EVENT Retention_Date_Update
ON SCHEDULE EVERY 2 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
ON COMPLETION PRESERVE
DO
BEGIN;
IF (gdpr_file_cabinet.AISTATUS = 'TRIGGER REQUIRED')
THEN
IF (gdpr_file_cabinet.EMPLOYMENT_STATUS = 0)
THEN
UPDATE gdpr_file_cabinet
SET REVIEW_EXPIRY_DATE = (RETENTION_START_DATE + INTERVAL adata.EDB_RETENTION_EMPLOYED MONTH)
AND AISTATUS = "TRIGGER COMPLETE"
WHERE documentName = adata.EDB_DOCUMENT_NAME;
ELSE
UPDATE gdpr_file_cabinet
SET REVIEW_EXPIRY_DATE = (RETENTION_START_DATE + INTERVAL adata.EDB_RETENTION_UNEMPLOYED MONTH)
AND AISTATUS = "TRIGGER COMPLETE"
WHERE documentName = adata.EDB_DOCUMENT_NAME;
END IF;
END IF;
END;//
DELIMITER ;
我有两个数据库,每个数据库都包含一个我需要引用的表。 数据库1是“adata”,表1是“gdpr_data”。 数据库2为“dwdata”,表2为“gdpr_file_cabinet”。
可能相关的第二个问题是事件将创建,但当我运行上面的代码时不会启动。全局事件调度程序已打开 (SET @@global.event_scheduler = 1)。
我对此有疑问: 1 - 任何人都可以识别语法错误吗,因为我看不到它。 2 - 为什么事件“执行于”框保持为空。 3 - 我可以将 Workbench 设置为突出显示此类错误,因为除非我尝试运行脚本,否则它目前不会警告我。
最佳答案
这可能只是 1 个更新语句,因为第二个 if 似乎不相关
UPDATE gdpr_file_cabinet g join adata a on a.EDB_DOCUMENT_NAME = g.documentname
SET REVIEW_EXPIRY_DATE = (RETENTION_START_DATE + INTERVAL a.EDB_RETENTION_EMPLOYED MONTH)
, AISTATUS = "TRIGGER COMPLETE"
WHERE g.aistatus = 'TRIGGER REQUIRED';
我还没有对此进行测试,如果您遇到问题,请阅读手册,如果遇到困难,请将表定义和示例数据作为文本添加到问题中。
关于mysql - SQL 语法错误和事件无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849846/