MySQL Event Schedule every last day of the month

Viewed 392

I want to schedule a copy of a table on every last day of the month. But I get an error on code line 4. What should be the correct code? The stored procedure for the table copy works fine.

Screenshot with error

DROP EVENT IF EXISTS `create_table_test_month`;
DELIMITER $$
CREATE EVENT `create_table_test_month`
ON SCHEDULE EVERY LAST_DAY(CURDATE() + INTERVAL 1 MONTH) STARTS '2022-03-31 23:30:00'
ON COMPLETION PRESERVE
DO BEGIN
call data.test_create_table();
END$$
DELIMITER ;

With kind regards,

Björn

1 Answers

The error is due to the fact that the EVERY clause wants an INTERVAL type (which identifies the period of time it will lag from the STARTS clause), while it's receiving a DATE value.

You can solve this issue by feeding an eligible interval in the EVERY clause, like the following:

DROP EVENT IF EXISTS `create_table_test_month`;
DELIMITER $$
CREATE EVENT `create_table_test_month`
ON SCHEDULE EVERY 1 MONTH STARTS '2022-03-31 23:30:00'
ON COMPLETION PRESERVE
DO BEGIN
    call data.test_create_table();
END$$
DELIMITER ;

For more information on events and intervals, there are some good examples at MySQL official documentation: https://dev.mysql.com/doc/refman/5.7/en/create-event.html.

Related