使用/ dynamic Name调用表的MySQL存储过程

时间:2014-12-08 16:46:28

标签: mysql stored-procedures prepare

我在MySQL中有一个存储过程,它调用一个将值插入表中的函数。 insert语句类似于

INSERT INTO Table1 SELECT * from Table2

Table2具有变量名称,具体取决于调用过程的日期 table_201410,如果该程序是在2014年10月调用的。每个月,该程序应该从另一个表中进行选择。

我已经阅读了一些有关准备和执行的答案,但我是MySQL/Programming的新手。我有点失落。

1 个答案:

答案 0 :(得分:2)

您可以使用这样的预备语句:

DELIMITER $$
DROP PROCEDURE copy_table $$
CREATE PROCEDURE copy_table ()
BEGIN

    set @table_name = date_format(now(),'%Y%m'); -- getting year and month

    -- concatenating
    set @sql =  concat('INSERT INTO Table1 SELECT * from table_',@table_name);


    -- creating a prepared statement and executing
    PREPARE insert_stmt FROM @sql;
    EXECUTE insert_stmt;
    DEALLOCATE PREPARE insert_stmt;
END$$

DELIMITER ;