Выполнить Mysql переменную запроса в процедуре - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь динамически добавлять столбцы в таблицу.

Я получаю синтаксическую ошибку 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);'

Как я могу выполнить свое утверждение?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...