使用存储过程和表变量名创建一个事件

时间:2017-08-10 08:06:56

标签: mysql events stored-procedures

我希望每周复制过去一周的所有数据,并将其插入一个表格(表格名称中包含周数)。

使用存储过程可以正常工作:

SET @weekno:=WEEKOFYEAR(NOW());
SET @sql_text = concat('INSERT INTO 
archive.data_2017_week_',@weekno,'  select * from live.data_archive where 
year(time) = 2017 AND week(time) = ',@weekno,'');

PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

但是,如果我尝试在phpMyAdmin中为此做一个周活动,我会得到MySQL'错误代码:1064'。

是否可以在事件中运行预准备语句?

如果没有,是否有更好的方法可以将每周数据复制到一个表中,其中包含一周中包含的周数?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以简单地创建一个存储过程,如下面的代码

所示
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `YOUR_PROCEDURE`()
BEGIN
    SET @weekno:=WEEKOFYEAR(NOW());
    SET @sql_text = concat('INSERT INTO 
                            archive.data_2017_week_',@weekno,'  select * from live.data_archive where 
                            year(time) = 2017 AND week(time) = ',@weekno,'');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END$$
DELIMITER ;

然后使用事件调用该过程,如下面的代码所示。

有关它的基础知识,您可以在此处查看MySQL Events and Time Duration

CREATE EVENT YOUR_EVENT_NAME
    ON SCHEDULE EVERY 1 week
    DO
      CALL YOUR_PROCEDURE();