Search code examples
mysqlsyntaxprocedure

MySQL procedure syntax


Does anyone of you know how to use a VARCHAR parameter inside a MySQL procedure? I tried the following:

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 ;

with

CALL procedure_name('test');

but it always creates a table called "name" instead of "test".


Solution

  • You need to use CONCAT with statement to construct the query and execute it, e.g.:

    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 ;