MySQL存储过程动态更改表名

时间:2010-09-07 21:18:11

标签: sql stored-procedures mysql

我想在sql查询中更改表的动态名称。例如,我有下一个存储过程:

CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
    INSERT INTO tableName VALUES (message);
END;

我需要在运行时更改 tableName ,我可以这样做吗? 感谢。

1 个答案:

答案 0 :(得分:0)

您必须使用动态SQL到prepareexecute一个SQL字符串,以实现您所描述的内容。

在准备之前,必须将动态表名(或列名或SQL关键字等)插入到SQL字符串中。您不能对这些动态元素使用查询参数。

在将表名插入SQL查询时,请小心避免SQL注入漏洞。例如,您应该通过information schema

中的查找来检查表名是否存在

我同意@OMG Ponies的评论 - 这是一个code smell,你有多个具有相同结构的表,这样你就可以对完全相同的列进行完全相同的插入。代码气味并不能保证你的设计不好,但值得考虑。