sql语法错误,事件无法启动

xytpbqjk  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我一直在尝试编写一个事件触发器,以便在列“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\u data”。 db2 是“dwdata”,表2是“gdpr\u file\u cabinet”。
第二个可能与此相关的问题是,事件将创建,但当我像上面那样运行代码时,它不会启动。全局事件计划程序已打开(设置@@global.event\u scheduler=1)。
关于这个问题我有:1-谁能识别语法错误,请,因为我看不到它。2-为什么事件“execute at”框保持为空。3-我可以将workbench设置为高亮显示这样的错误,因为除非我尝试运行脚本,否则它当前不会警告我。

jdg4fx2g

jdg4fx2g1#

这可能只是一个update语句,因为第二个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';

我还没有测试过这个,如果你遇到问题,请阅读手册,如果有困难,请添加表格定义和样本数据的问题作为文本。

相关问题