Mysql
 sql >> Database >  >> RDS >> Mysql

mysql crea la tabella in modo dinamico

Per fare in modo che una stringa rappresenti un nome di tabella (o database), dovrai concatenare la tua stringa di query con la variabile e preparare/eseguire un'istruzione direttamente nella procedura memorizzata. Ecco un esempio di base.

-- DROP PROCEDURE IF EXISTS createLogTable;
DELIMITER //
CREATE PROCEDURE createLogTable(tblName VARCHAR(255))
BEGIN
    SET @tableName = tblName;
    SET @q = CONCAT('
        CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
            `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
            `something` VARCHAR(10) NOT NULL,
            `somedate` DATETIME NOT NULL,
            PRIMARY KEY (`id`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    ');
    PREPARE stmt FROM @q;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    -- and you're done. Table is created.
    -- process it here if you like (INSERT etc)
END //

Quindi... CALL createLogTable('exampleTable');

Quindi l'idea di base è

  1. Concatena i parametri della procedura con la tua query, se necessario
  2. prepara/esegui un'istruzione da questa stringa di query