#mysql
#mysql
Вопрос:
Я пытаюсь создать хранимую процедуру для изменения имени существующей таблицы путем добавления к ней даты.
Я использую MySQL только короткое время и не могу понять, почему код не работает. Я использую MySQL Workbench 8.0 Community для подключения к базе данных MySQL и запуска кода. В Workbench ошибки не возвращаются при запуске кода.
Код, который мне удалось найти до сих пор, является:
DELIMITER \
DROP PROCEDURE IF EXISTS `usp_test_dynamic_sql`\
CREATE PROCEDURE `usp_test_dynamic_sql`()
BEGIN
SET @s = concat('ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_',replace(date(now()),'-',''));
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
END\
DELIMITER ;
Я запустил часть кода, чтобы найти значение @s, выполнив:
SET @s = concat('ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_',replace(date(now()),'-',''));
select @s;
Затем я вставил результат для @s
ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_20200904
Это меняет имя таблицы, но я не могу понять, почему хранимая процедура этого не делает. Любая помощь будет высоко оценена.
Комментарии:
1. Работает для меня — можете ли вы показать, как вы вызываете SP и где вы это делаете (локально, в скрипте, aws), и, пожалуйста, подтвердите, что у вас есть права на запуск SPS
2. Также работает db-fiddle.com/f/j4HQpgVkSSoE7UQA1gNXS8/0
3. Я запускаю ее в окне запроса в workbench, на моем локальном компьютере, с vpn-подключением к сети, в которой находится сервер. Я запускаю скрипт, а не выполняю SP.
4. Я только что выполнил SP в окне запроса и получил следующую ошибку: 15:23:30 выполнить usp_test_dynamic_sql Код ошибки: 1243. Неизвестный обработчик подготовленной инструкции (usp_test_dynamic_sql), который выполняется 0,031 сек.
5. Я не уверен, какова конечная цель, но, возможно, разделение выполнит то же самое, что вы пытаетесь сделать с процедурами?
Ответ №1:
Выполните свой SP как
CALL usp_test_dynamic_sql();
Вы также можете захотеть изменить свой
replace(date(now()),'-','')
с
DATE_FORMAT(NOW(),'%Y%m%d')
Хотя это и не является абсолютно необходимым. Если вы это сделаете, не оставляйте пробелы и не используйте ‘-‘ или ‘/’ между форматами, поскольку MySQL выдает ошибку.
Комментарии:
1. Ах, спасибо, именно так я запускал SP, как я уже сказал, я новичок в MySQL и также благодарю вас за совет по dateformat.
2. И какой сценарий вы упоминали? «Я запускаю скрипт, а не выполняю SP»