2016-08-22 7 views
0

私は入力変数の値を使用してデータベースを作成するストアドプロシージャを持っていますが、変数名自体を使用してデータベースを作成するだけです。MySQLはデータベース名として変数値を使用します

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

は、どのように私は、「DBNAME」と呼ばれるデータベースを作成するのではなく、dbnameの値を使用することができます。

+3

[Mysqlの動的データベース名を使用したテーブルの作成](0120-998-321) – 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(ローカル変数)と共に使用するとフレークであることに注意してください。

関連する問題