0

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

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

非常感谢您的宝贵时间

4

1 回答 1

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

为我工作就好了

于 2013-06-27T07:10:15.130 回答