Используйте процедуру MySQL для изменения имени таблицы

#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»