mysql - 如何在 Mysql 中使用准备语句来使用数据库
问题描述
set @switch_schema= concat('use ', v6_schema, ';');
select @switch_schema;
PREPARE s3 from @switch_schema;
EXECUTE s3;
Prepare 语句不支持“使用”;有针对这个的解决方法吗?解决方法如下,但我正在寻找更强大的解决方案
set @db := v6_schema;
drop temporary table if exists tempdb.activeUnits;
set @query = concat ('create temporary table tempdb.activeUnits
select *
from ',@db,'.activemodelunits_blue
where active_datetime = (Select max(active_datetime) from ',@db,'.ActiveModelUnits_blue) ';
PREPARE s3 from @query;
EXECUTE s3;
解决方案
恐怕由于您不能USE
作为准备好的语句运行,因此您的选择是有限的。
USE
在你调用这个例程之前
您可以USE
在调用引用表的过程之前从您的应用程序调用。
USE v6_schema;
CALL MyProcedure();
USE
里面一个CASE
如果您在存储过程中编写此代码,则可以使用CASE 语句。
BEGIN
CASE v6_schema
WHEN 'myschema1' THEN USE myschema1;
WHEN 'myschema2' THEN USE myschema2;
WHEN 'myschema3' THEN USE myschema3;
ELSE USE mydefaultschema;
END CASE;
END;
这意味着您仅限于已编码的模式的有限列表。如果不更新代码,您将无法使其适应您将来想到的任何未来模式名称。
使用限定的表名
这是您在问题中提到的解决方法。每次在准备好的查询中引用这些表时,将模式名称与表名连接起来。
推荐阅读
- javascript - 检查列表中是否存在 Anagrams 单词的最佳复杂度是多少?
- python - 访问 OptionMenu 项目 - Tkinter
- php - 如何从 PHP 循环订购打印数据?
- uwp - 为什么我的事件处理程序被认为没有引用?
- javascript - javascript没有输出
- swiftui-list - NavigationLink:显示带有调查的中间视图,并在关闭后 - 继续“目标”视图
- python - 为什么这个素数算法对 323 失败?
- javascript - Web编程中的fetch(js中的函数)和socket io有什么区别
- svn - 通过系统命令行检查 SVN 文件夹外部
- android - 记住不要再问可以吗?