使用/动态名称调用表的 MySQL 存储过程

Posted

技术标签:

【中文标题】使用/动态名称调用表的 MySQL 存储过程【英文标题】:MySQL Stored Procedure that Calls a Table w/ dynamic Name 【发布时间】:2014-12-08 16:46:27 【问题描述】:

我在mysql 中有一个存储过程,它调用一个将值插入到表中的函数。 插入语句就像

INSERT INTO Table1 SELECT * from Table2

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

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

【问题讨论】:

【参考方案1】:

你可以像这样使用准备好的语句:

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 ;

【讨论】:

以上是关于使用/动态名称调用表的 MySQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL_05存储过程

MySQL之视图触发器事务存储过程

MySQL存储过程

SQL存储过程如何调用存储过程?

mysql七:视图触发器事务存储过程函数

mysql之视图触发器事务存储过程函数