Ошибка синтаксиса SQL и событие не запускается - PullRequest
0 голосов
/ 19 декабря 2018

Я пытался написать триггер события для обновления таблицы всякий раз, когда столбец "AISTATUS" изменяется на значение "TRIGGER REQUIRED".Мне не удалось получить триггер для ссылки на две отдельные таблицы, чтобы натянуть нужные мне значения, поэтому я решил использовать событие вместо этого.Единственный улов в том, что я получаю синтаксическую ошибку: 1064 в строке 1, но я изо всех сил пытаюсь понять, почему есть ошибка или где она есть.

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 Ответ

0 голосов
/ 19 декабря 2018

Это может быть всего лишь 1 оператор обновления после второго, если кажется, что он не имеет отношения к делу

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'; 

Я не проверял это, если у вас возникли проблемы, пожалуйста, прочитайте руководство и, если не получается, добавьте определения таблици образец данных к вопросу в виде текста.

...