mysql 表名做爲存儲過程變量

mysql默認不支持表名做爲變量名,以下所示mysql

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

當運行會報錯sql

[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;
相關文章
相關標籤/搜索