使用转义的数据库名称调用MySQL存储过程

时间:2013-06-26 20:01:57

标签: mysql stored-procedures

我正在使用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

我希望有一些非常明显的东西,我在这里忽略。

非常感谢你的时间

1 个答案:

答案 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');

为我工作很好