Я пытаюсь написать сценарий MySQL, отбрасывая некоторые таблицы, выбранные по шаблону, но моя процедура не компилируется. Кто-нибудь может посоветовать, что с ним не так, пожалуйста?Выполнение динамических запросов mysql
delimiter #
drop procedure if exists drop_audit_tables #
create procedure drop_audit_tables()
begin
declare done int default false;
declare cmd varchar(4000);
declare cmds cursor for select 'drop table [' + table_name + ']' from information_schema.tables where table_name like '%_audit';
declare continue handler for not found set done = true;
open cmds;
tLoop: loop
fetch cmds into cmd;
if done then
leave tLoop;
end if;
PREPARE STMT FROM cmd;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
end loop tLoop;
close cmds;
end #
сообщение об ошибке:
[42000] [1064] У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'cmd; EXECUTE STMT; DEALLOCATE PREPARE STMT; end loop tLoop; близко см»в строке 13
Я никогда не использовал курсоры, но я могу сказать, что 'ГОТОВИТ STMT FROM ЦМДА,' может потерпеть неудачу, если 'cmd' не является строка, которая представляет собой действующую команду SQL. Я вижу ваши 'fetch cmds в cmd;' строку, но это действительно хорошая идея? Эта строка фактически помещает команду SQL в 'cmd', или * result set * третьего выражения' declare'. Просто пытаюсь помочь. Энтони. –
Я могу подождать, чтобы изменить разделитель после запуска 'drop procedure, если существует drop_audit_tables'. –
Где находится '['+ table_name +'] ''? Откуда появляется табличное имя? –