The MYSQL procedure will
1. Create TABLE1_ARCHIVE similar to TABLE1 if it is not there.
2.Insert the values from the TABLE1 into TABLE1_ARCHIVE based on date condition
3. Delete those records from TABLE1.
Link to the code: https://paiza.io/projects/Eq7I5YGo-lt7_gu8wpQNdg?language=mysql
CREATE PROCEDURE ARCHIVE_EVENTS ( IN f_table VARCHAR(255),
IN t_table VARCHAR(255),
IN t_ts TIMESTAMP)
BEGIN
DECLARE c_sql VARCHAR(255);
DECLARE i_sql VARCHAR(255);
DECLARE d_sql VARCHAR(255);
SET @c_sql = CONCAT(' CREATE TABLE IF NOT EXISTS ', @t_table , ' LIKE ', @f_table );
PREPARE stmt FROM @c_sql;
EXECUTE stmt ;
SET @i_sql = CONCAT(' INSERT INTO ', @t_table, ' SELECT * FROM ', @f_table, ' WHERE `event_date` <= ', @t_ts);
PREPARE stmt FROM @i_sql;
EXECUTE stmt ;
COMMIT;
SET @d_sql = CONCAT(' DELETE FROM ', @f_table, ' WHERE `event_date` <= ', @t_ts);
PREPARE stmt FROM @d_sql;
EXECUTE stmt ;
COMMIT;
END;
CALL ARCHIVE_EVENTS ('TABLE1', 'TABLE1_ARCHIVE', now());
After doing the changes, the procedure looks like this and is still not working :
The error that i am getting is
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
CREATE PROCEDURE ARCHIVE_EVENTS (IN f_table VARCHAR(255),IN t_table VARCHAR(255),IN t_ts TIMESTAMP)
BEGIN
DECLARE c_sql VARCHAR(255);
DECLARE i_sql VARCHAR(255);
DECLARE d_sql VARCHAR(255);
SET c_sql = CONCAT(' CREATE TABLE IF NOT EXISTS ', t_table , ' LIKE ', f_table);
PREPARE stmt FROM c_sql;
EXECUTE stmt ;
SET i_sql = CONCAT(' INSERT INTO ', t_table, ' SELECT * FROM ', f_table, ' WHERE `event_date` <= ', t_ts);
PREPARE stmt FROM i_sql;
EXECUTE stmt ;
COMMIT;
SET d_sql = CONCAT(' DELETE FROM ', f_table, ' WHERE `event_date` <= ', t_ts);
PREPARE stmt FROM d_sql;
EXECUTE stmt ;
COMMIT;
END;
CALL ARCHIVE_EVENTS ('TEST', 'TEST_ARCHIVE', now());