我正在使用MySQL:5.1.69
我创建了存储过程并多次调用它们。在这种情况下,我似乎遇到了与架构名称中的转义字符相关的障碍。
我们的MySQL数据库/架构的名称如下:www.company.com
因此,我们必须始终转义数据库名称,如下所示:`www.company.com`.table_name
我在MySQLWorkbench
中创建了一个过程CREATE PROCEDURE usp_backfill_data
(p_var1 INT(11)
,p_var2 DATETIME)
BEGIN
/*do lots of work here*/
END
从MySQL Workbench中我可以使用:
调用该过程use `www.company.com`;
CALL usp_backfill_data(5000, '2012-01-01');
在这些条件下,程序完全符合预期。
但是,当我尝试从命令行调用该过程时:
%> mysql -uuser -ppassword -Dwww.company.com -e "CALL usp_backfill_data(5000, '2012-01-01');"
或当我尝试
时%> mysql -uuser -ppassword -e "CALL \`www.company.com\`.usp_backfill_data(5000, '2012-01-01');"
或当我登录mysql命令行并使用:
mysql> use `www.company.com`;
mysql> CALL usp_backfill_data(5000, '2012-01-01');
我总是收到以下错误:
ERROR 1305 (42000) at line 1: PROCEDURE www.company.com.usp_backfill_data does not exist
我希望有一些非常明显的东西,我在这里忽略。
非常感谢你的时间
答案 0 :(得分:1)
要在命令行中转义数据库名称,请使用双引号
$ mysql -uuser -ppassword -D"www.company.com" -e "CALL usp_backfill_data(5000, '2012-01-01');"
^ ^
其他两种方法
$ mysql -uuser -ppassword -e "CALL \`www.company.com\`.usp_backfill_data(5000, '2012-01-01');"
和
$ mysql -uuser -ppassword
mysql> USE `www.company.com`;
Database changed
mysql> CALL usp_backfill_data(5000, '2012-01-01');
为我工作很好