mysql - SQL 语法错误和事件无法启动

标签 mysql sql syntax-error

每当列“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/

相关文章:

mysql - 使用 MySQL 从具有 ID 列表的多个表中选择多行的最有效方法

php - "SQLSTATE[HY000]: General error: 1364 Field ' user_id ' doesn' t 有默认值(SQL : insert into

SQL*Plus - 数字列显示十六进制字符

java - 通用记录器接口(interface)引发语法错误

mysql - 如何引用 SELECT 查询引用的字段?

php - 一个查询中的两个位置

mysql - SQL 为每个 ID 选择最近的记录

sql - Oracle SQL 语句中多列的总和(按唯一 ID)

c# - 并非所有路径都返回值-Windows Form App-C#

python - 我的 python 解释器不识别字符串