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

他の2つの方法

$ 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 に答える