Процедура MYSQL будет
1. Создайте TABLE1_ARCHIVE, аналогичный TABLE1, если его там нет.
2. Вставьте значения из таблицы TABLE1 в таблицу TABLE1_ARCHIVE на основе даты
3. Удалите эти записи из TABLE1.
Ссылка на код:
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());
После внесения изменений процедура выглядит следующим образом и все еще не работает:
Я получаю ошибку
ОШИБКА 1064 (42000) в строке 2: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 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());