当前位置: 首页 > 面试题库 >

MySQL存储过程动态更改表名

公孙阳羽
2023-03-14
问题内容

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

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

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


问题答案:

您必须使用动态SQL来准备和执行SQL字符串,以实现您所描述的内容。

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

当您将表名称插入到SQL查询中时,请小心避免SQL注入漏洞。例如,您应该通过在信息模式中查找表名来检查表名是否存在。

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



 类似资料:
  • 在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。 MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。 MySQL 中修改存储过程的语法格式如下: ALTER PROCEDURE 存储过程名 [ 特征 ... ] 指定了存储过程的特性,可能的取值有: CONTAINS SQL 表示子程序包含 SQL

  • 问题内容: 我在存储过程中创建一个动态查询。我的存储过程如下: 当我尝试通过以下调用运行它时: 我收到以下错误消息: 错误代码:1054。“ where子句”中的未知列“ SPA” 我在没有where条件的情况下进行了测试,并且工作正常,但是在where条件不起作用的情况下,我尝试使用@和变量名一起使用,但仍然无法正常工作。 谢谢你的帮助。 问题答案: 您错过了条款中的引号。 尝试这样: 说明 :

  • 1选定列的参数(选定的筛选器/下拉属性或从UI发送的列名) 2 dynamic where子句的参数,用于为点1中选择的类似下拉列表值准备 从视图中获取数据,并以这种方式检索结果 注意:在这一点上没有要求显示特定于某个用户的数据。同样忽略上面代码中的参数插值部分 是否存在任何数据完整性问题,不同的用户将看不到UI上更新的值(为了提供更多的上下文,从此过程中的视图中提取数据,并且该视图数据在应用程序

  • 问题内容: 我在MySQL数据库中存储了大约一百个例程,其中大多数都以“ root”作为定义者。 我有另一个名为“ abc”的mysql帐户,如何将所有例程的定义程序更改为“ abc”。 如果我只能以“ abc”用户而不是“ root”用户身份访问MySQL服务器,是否可以这样做? 问题答案: 据我所知:您将必须获取所有脚本的脚本文本并将其拖放/重新创建为abc。除非abc有权删除/创建过程,否则

  • 我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如,为了确认学生能否毕业,需要同时查询学生档案表、成绩表和综合表,此时就需要使用多条 SQL 语句来针对这几个数据表完成处理要求。 存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL

  • 本文向大家介绍Java Spring动态生成Mysql存储过程详解,包括了Java Spring动态生成Mysql存储过程详解的使用技巧和注意事项,需要的朋友参考一下 一、 背景   由于公司业务需要动态配置一些存储过程来生成数据,之前尝试过使用jpa来完成,或多或少都存在一些问题,最后使用了spring的Jdbctemplate。 二、 环境   1.此随笔内容基于spring boot项目