Я пытаюсь использовать команду alter table в хранимой процедуре MySQL,
Я использовал CONCAT для формирования запроса, который требуется выполнить в процедуре,
Сформированный запрос alter работает нормально, если я запускаюэто вне хранимой процедуры.
Как я могу выполнить ее внутри процедуры?
Ниже приведен мой фрагмент -
CREATE DEFINER=`root`@`localhost` PROCEDURE `alter_table_in_sp`()
BEGIN
DECLARE snapshot_year INT;
DECLARE partition_name VARCHAR(17);
DECLARE addPartition VARCHAR(100);
SET snapshot_year := DATE_FORMAT(NOW(),'%Y');
SET partition_name := CONCAT('snapshot_',snapshot_year);
SET addPartition := CONCAT('ALTER TABLE snapshot ADD PARTITION (PARTITION ', partition_name, ' VALUES IN (', snapshot_year,'))');
#EXECUTE addPartition;
#PREPARE _stmt FROM @addPartition;
#EXECUTE _stmt;
#DEALLOCATE PREPARE _stmt;
END
Я попробовал следующее -
1.
EXECUTE addPartition
Ошибка -
Error Code: 1243. Unknown prepared statement handler (addPartition) given to EXECUTE
2.
PREPARE _stmt FROM @addPartition;
EXECUTE _stmt;
DEALLOCATE PREPARE _stmt;
Ошибка -
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
Ссылки -
СохраненоПроцедура с ALTER TABLE