Mysql从过程

时间:2018-01-16 10:21:27

标签: mysql

我想从MySQL 5.6上的数据库中的每个表中删除MySQL数据。

在我的数据库中,每个表都有一个具有以下格式的列:_date TIMESTAMP。

目标是运行一个过程,该过程将每5天从数据库中删除所有数据。所以我做了以下事情:

DELIMITER //

DROP PROCEDURE if exists clearData //
CREATE PROCEDURE clearData()
BEGIN
    DECLARE done int default false;
    DECLARE table_name CHAR(255);
    SET @REMOVE_DATE = SELECT DATE_SUB(NOW(), INTERVAL 5 day);

    DECLARE cur1 CURSOR FOR 
      SELECT TABLE_NAME
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='storagedb';

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur1;

    myloop: LOOP
        fetch cur1 into table_name;
        IF done THEN
            LEAVE myloop;
        END if;
        SET @sql = CONCAT('DELETE from `storagedb`.', table_name, ' where ', table_name,'_date >= ',@REMOVE_DATE);
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DROP PREPARE stmt;
    END LOOP;

    CLOSE cur1;
END //

DELIMITER ;

但是我收到了这个错误:

 #1064 - 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 'SELECT DATE_SUB(NOW(), INTERVAL 5 day);

我以前使用postgres所以我不知道它有什么问题

此致

1 个答案:

答案 0 :(得分:0)

SET @REMOVE_DATE = SELECT DATE_SUB(NOW(), INTERVAL 5 day);

应该是

SET @REMOVE_DATE = DATE_SUB(NOW(), INTERVAL 5 day);

这至少可以解决你的语法错误