我想在sql查询中更改表的动态名称。例如,我有下一个存储过程:
CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
INSERT INTO tableName VALUES (message);
END;
我需要在运行时更改 tableName ,我可以这样做吗? 感谢。
答案 0 :(得分:0)
您必须使用动态SQL到prepare和execute一个SQL字符串,以实现您所描述的内容。
在准备之前,必须将动态表名(或列名或SQL关键字等)插入到SQL字符串中。您不能对这些动态元素使用查询参数。
在将表名插入SQL查询时,请小心避免SQL注入漏洞。例如,您应该通过information schema。
中的查找来检查表名是否存在我同意@OMG Ponies的评论 - 这是一个code smell,你有多个具有相同结构的表,这样你就可以对完全相同的列进行完全相同的插入。代码气味并不能保证你的设计不好,但值得考虑。