mysql 表名作為存儲過程變量


mysql默認不支持表名作為變量名,如下所示

delimiter $$
DROP procedure IF EXISTS getDataByDbName $$ 
CREATE procedure getDataByDbName(in dbName VARCHAR(20))
BEGIN
select * from dbName;
end$$
delimiter;

當運行會報錯

[SQL]
call getDataByDbName("xxx");
[Err] 1146 - Table 'xxx.dbname' doesn't exist

這里需要用到mysql的一個字符串拼接函數CONCAT(),使用用戶變量得到結果,然后輸出即可

delimiter $$
DROP procedure IF EXISTS getDataByDbName $$ 
CREATE procedure getDataByDbName(in dbName VARCHAR(20))
BEGIN
SET @STMT =CONCAT("SELECT * from ",dbName,";"); 
PREPARE STMT FROM @STMT; 
EXECUTE STMT; 
end$$
delimiter;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM