簡體   English   中英

如何在 Mysql 中使用准備語句來使用數據庫

[英]How to use prepare statement for Use database in 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();

CASEUSE

如果您在存儲過程中編寫此代碼,則可以使用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;

這意味着您僅限於已編碼的模式的有限列表。 如果不更新代碼,您將無法使其適應您將來想到的任何未來模式名稱。

使用限定的表名

這是您在問題中提到的解決方法。 每次在准備好的查詢中引用這些表時,將模式名稱與表名連接起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM