можно ли вызвать sql-скрипт из хранимой процедуры в другом sql-скрипте?

Я хотел бы использовать . для вызова сценария sql из хранимой процедуры, например...

delimiter ///
create procedure append_procedure()
BEGIN
\. test.sql;    
END; ///
delimiter ;

Я получаю сообщение "не удалось открыть test.sql;" "ошибка, когда я запускаю ее таким образом. я тоже пробовала! но затем я получаю отказ в разрешении. Однако я не могу устранить ; или все сломалось. Это можно обойти?

Что я делаю неправильно?


person Yevgeny Simkin    schedule 13.02.2009    source источник


Ответы (2)


Существует набор команд, встроенных в клиент mysql. Они задокументированы в разделе "mysql Commands". К ним относятся DELIMITER, SOURCE, HELP, CONNECT, USE, QUIT и т. д.

Команда \. (или SOURCE) является одной из этих встроенных команд. Эти встроенные команды нельзя выполнять ни программно, ни из хранимой процедуры.

Это все равно, что пытаться запустить встроенную оболочку UNIX из программы на C, используя execl().

Другая аналогия может быть в веб-браузере, где вы можете вводить специальные запросы, такие как «about:», которые обрабатываются самим приложением браузера; это не приводит к каким-либо HTTP-запросам к удаленному веб-сайту.

Кроме того, не помогло бы, если бы вы могли получить сценарий из хранимой процедуры, потому что сам сценарий, вероятно, содержит набор команд, которые являются встроенными клиентскими функциями mysql и, следовательно, не могут быть запущены хранимой процедурой.


Смотрите также мои ответы на эти связанные вопросы:

person Bill Karwin    schedule 13.02.2009
comment
так вы говорите, что нет никакого способа сделать это? или что я просто не могу сделать это с помощью \.? - person Yevgeny Simkin; 16.02.2009
comment
У хранимой процедуры нет возможности получить сценарий или запустить многие команды в сценарии, даже если вы можете его получить. - person Bill Karwin; 16.02.2009