2017-06-09 18 views
0

誰かがMySQLプロシージャ内でVARCHARパラメータを使用する方法を知っていますか?MySQLプロシージャの構文

CALL procedure_name('test'); 

DELIMITER $$ 
CREATE PROCEDURE `procedure_name` (IN name VARCHAR(64)) 
BEGIN 
    CREATE TABLE IF NOT EXISTS CONCAT(name) (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32)); 
    CREATE TABLE IF NOT EXISTS `name` (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32)); 
    CREATE TABLE IF NOT EXISTS name (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32)); 
END$$ 
DELIMITER ; 

が、それはいつもの代わりに「テスト」の「名前」と呼ばれるテーブルを作成します。 は、私は次のことを試してみました。

答えて

0

あなたは例えば、クエリを作成し、それを実行するためにstatementCONCATを使用する必要があります。:

DELIMITER $$ 
CREATE PROCEDURE `procedure_name` (IN name VARCHAR(64)) 
BEGIN 

    SET @query = CONCAT('CREATE TABLE IF NOT EXISTS', name, '(`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32))'); 
    PREPARE stmt FROM @query ; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 

END$$ 
DELIMITER ; 
+0

+1これは完全に動作しています。しかし、どうすればいいですか? 「CALL procedure_name( 'helloWorld')」は「)」の近くに構文エラーをスローします。 –

+0

@mickedplayは 'CREATE'構文を追加しました。 –

+0

パーフェクト、ありがとう。 –

0

Name予備のキーワードであるように思われます。また、INはパラメータのデフォルトタイプです。試してみてください:

DELIMITER $$ 
CREATE PROCEDURE `procedure_name` (p_name VARCHAR(64)) 
BEGIN 
    CREATE TABLE IF NOT EXISTS p_name (`id` INT(11) PRIMARY KEY AUTO_INCREMENT, `uid` VARCHAR(32)); 
END$$ 
DELIMITER ;