如何解决Mysql中使用数据库的prepare语句
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 ','.ActiveModelUnits_blue) ';
PREPARE s3 from @query;
EXECUTE s3;
解决方法
恐怕您无法将 USE
作为准备好的语句运行,因此您的选择有限。
USE
在调用此例程之前
在调用引用表的过程之前,您可以从应用程序调用 USE
。
USE v6_schema;
CALL MyProcedure();
USE
在 CASE
中
如果您在存储过程中编写此代码,则可以使用 CASE statement。
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;
这意味着您只能使用已编码的有限模式列表。您无法在不更新代码的情况下使其适应您将来想到的任何架构名称。
使用限定的表名
这是您在问题中提到的解决方法。每次在准备好的查询中引用这些表时,将架构名称与表名称连接起来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。