sql - MySQL存储过程动态修改表名

标签 sql stored-procedures mysql

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

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

我需要在运行时更改tableName,我可以做还是不做? 谢谢。

最佳答案

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

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

将表名插入 SQL 查询时,请小心避免 SQL 注入(inject)漏洞。例如,您应该通过在 information schema 中查找表名来检查它是否存在。 .

我同意@OMG Ponies 的评论——这是 code smell您有多个具有相同结构的表,因此您想对完全相同的列执行完全相同的插入。代码味道并不能保证您的设计不好,但值得考虑。

关于sql - MySQL存储过程动态修改表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662850/

相关文章:

mysql - 使用两个表访问数据库

php - 存储过程在与 fetch_all 一起使用时导致 mysqli 出现问题

java - org.hibernate.exception.LockAcquisitionException : could not extract ResultSet

php - 提交 html 数据并停留在同一页面上

php - 对 MySQL join 真的很困惑

java - 什么语法用于从 JavaDB 数据库中选择常量字段值?

mysql - 如果多个表中不存在该行,则插入该行

mysql 存储过程输出文件

mysql - 如何频繁同步市场数据并显示为历史时间序列数据

mysql - 如何通过mysql对group进行嵌套选择