微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mysql中使用数据库的prepare语句

如何解决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();

USECASE

如果您在存储过程中编写此代码,则可以使用 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 举报,一经查实,本站将立刻删除。