Я хотел бы использовать . для вызова сценария sql из хранимой процедуры, например...
delimiter ///
create procedure append_procedure()
BEGIN
\. test.sql;
END; ///
delimiter ;
Я получаю сообщение "не удалось открыть test.sql;" "ошибка, когда я запускаю ее таким образом. я тоже пробовала! но затем я получаю отказ в разрешении. Однако я не могу устранить ; или все сломалось. Это можно обойти?
Что я делаю неправильно?
Ответ 1 · рейтинг 5 · Bill Karwin
Существует набор команд, встроенных в клиент mysql. Они задокументированы в разделе "mysql Commands". К ним относятся DELIMITER, SOURCE, HELP, CONNECT, USE, QUIT и т. д.
Команда \. (или SOURCE) является одной из этих встроенных команд. Эти встроенные команды нельзя выполнять ни программно, ни из хранимой процедуры.
Это все равно, что пытаться запустить встроенную оболочку UNIX из программы на C, используя execl().
Другая аналогия может быть в веб-браузере, где вы можете вводить специальные запросы, такие как "about:", которые обрабатываются самим приложением браузера; это не приводит к каким-либо HTTP-запросам к удаленному веб-сайту.
Кроме того, не помогло бы, если бы вы могли получить сценарий из хранимой процедуры, потому что сам сценарий, вероятно, содержит набор команд, которые являются встроенными клиентскими функциями mysql и, следовательно, не могут быть запущены хранимой процедурой.
Смотрите также мои ответы на эти связанные вопросы: