2016-08-22 260 views
0

我有一個存儲過程,應該使用輸入變量的值創建數據庫,但它只是使用變量名稱本身創建一個數據庫。MySQL使用變量值作爲數據庫名稱

DELIMITER // 
CREATE PROCEDURE proc_createdb (dbname VARCHAR(128)) 
BEGIN 
    CREATE DATABASE dbname; 
END // 

如何使用值dbname而不是創建名爲「dbname」的數據庫。

+3

可能重複[Mysql與動態數據庫名稱創建表](http://stackoverflow.com/questions/929244/mysql-create-table-with-dynamic-database-name) – xQbert

+0

當,爲什麼不關閉那個挖到下面:p – Drew

回答

2
DELIMITER // 
CREATE PROCEDURE proc_createdb (dbname VARCHAR(128)) 
BEGIN 
    SET @theSQL=CONCAT('CREATE DATABASE ',dbname); 
    PREPARE stmt1 from @theSQL; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stmt1; 
END // 
DELIMITER ; 

call proc_createdb('fred12236'); 
use fred12236; 
drop schema fred12236; 

請參閱標題爲SQL Syntax for Prepared Statements的MySQL手冊頁。請注意,它們總是使用CONCAT和用戶變量(帶@),如果與DECLARE(局部變量)一起使用,則它們是flakey。