Я пытаюсь динамически добавлять столбцы в таблицу.
Я получаю синтаксическую ошибку SQL при попытке выполнить инструкцию внутри следующей процедуры. :
DROP PROCEDURE IF EXISTS sp_collabs;
DELIMITER //
CREATE PROCEDURE sp_collabs(IN StartDate DATE, IN EndDate DATE)
BEGIN
DECLARE CurrentDate DATE;
DECLARE n INT;
DECLARE i INT;
DECLARE tempColumnName VARCHAR(255);
DECLARE queryAddDateColumn varchar(255);
SET @CurrentDate = StartDate;
SET @n = 0;
SET @i = 0;
SET @tempColumnName = '';
SET @queryAddDateColumn = '';
DROP TABLE IF EXISTS _tmpUniqueDates;
DROP TABLE IF EXISTS _tmpFinal;
CREATE TABLE _tmpUniqueDates (`uniqueDate` DATETIME);
CREATE TABLE _tmpFinal (`Collaborateur` varchar(255));
label1: WHILE @CurrentDate <= EndDate DO
INSERT IGNORE INTO _tmpUniqueDates select DATE_FORMAT(@CurrentDate, "%Y-%m-%d");
SET @CurrentDate = DATE_ADD(@CurrentDate, INTERVAL 1 DAY);
END WHILE label1;
##Créer la table finale
#Créer une table avec les colonnes pour toutes les dates.
SELECT COUNT(*) FROM _tmpUniqueDates INTO n;
SET i=0;
WHILE i<n DO
SET @tempColumnName = (SELECT uniqueDate FROM _tmpUniqueDates LIMIT i, 1);
SET @queryAddDateColumn = CONCAT('ALTER TABLE _tmpFinal ADD COLUMN'
,DATE_FORMAT(@tempColumnName, "%Y-%m-%d"),' VARCHAR(255);');
#SELECT CONCAT('',@queryAddDateColumn);
PREPARE stmt FROM @queryAddDateColumn;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
SELECT * FROM _tmpFinal;
END//
DELIMITER ;
CALL sp_collabs('2020-03-01', '2020-03-31');
Если я сделаю выборку по запросу, это будет выглядеть правильно: 'ALTER TABLE _tmpFinal ADD COLUMN 2020-03-01 VARCHAR(255);'
Как я могу выполнить свое утверждение?
Спасибо