I’d like to use . to call sql script from inside a stored proc like so…
delimiter /// create procedure append_procedure() BEGIN \. test.sql; END; /// delimiter ;
I’m getting a ‘failed to open ‘test.sql;’ ‘ error when I run it this way. I’ve also tried ! but then I get a permission denied error. However, I can’t eliminate the ; or the whole thing is broken. Is there a way around this?
What am I doing wrong?
There is a set of commands that are builtin to the mysql client. They’re documented under ‘
mysqlCommands.’ These include DELIMITER, SOURCE, HELP, CONNECT, USE, QUIT, etc.The
\.(orSOURCE) command is one of these builtins. You can’t execute these builtin commands programmatically, nor from within a stored procedure.It’d be like trying to run a UNIX shell builtin from a C program using
execl().A different analogy might be in a web browser, where you can type in special requests like ‘
about:‘ that are handled by the browser app itself; these don’t result in any HTTP request to a remote web site.Also, it wouldn’t help if you could source a script from within a stored procedure, because the script itself likely contains a bunch of commands that are mysql client builtins, and thus cannot be run by the stored proc.
See also my answers to these related questions: