无法执行 MySQL sql“源”使用 ActiveRecord 来自 Rake 任务的命令

发布于 2024-12-27 02:16:44 字数 635 浏览 0 评论 0原文

我编写了一个存储过程并希望在 Rake 任务中执行它。

在调用存储过程(通过“call”语句)之前,我应该使用 source 命令创建该过程,该命令由于以下错误而失败:

Mysql2::Error: 你的 SQL 语法有错误;检查手册 与您的 MySQL 服务器版本相对应的正确语法 在第 1 行的“source import_legacy_database.sql”附近​​使用:source 导入_legacy_database.sql

执行以下行时会发生此错误:

ActiveRecord::Base.connection.execute "source import_legacy_database.sql"

同一命令“source import_legacy_database.sql”在控制台中运行良好,但在 Rake 任务中则不然。

如果我不调用该命令,则会

ActiveRecord::Base.connection.execute "call import_legacy_database()"

失败,因为数据库找不到该过程,因为它不存在。

提前致谢。

I wrote a stored procedure and want to execute it within a Rake task.

Before calling the stored procedure (through the "call" statement) I should create the procedure with the source command which fails because of the following error:

Mysql2::Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'source import_legacy_database.sql' at line 1: source
import_legacy_database.sql

This error happens when the following line is executed:

ActiveRecord::Base.connection.execute "source import_legacy_database.sql"

The same command "source import_legacy_database.sql" runs fine when in the console, but not in the Rake task.

If I don't call that command then

ActiveRecord::Base.connection.execute "call import_legacy_database()"

fails because the database doesn't find the procedure because it does not exist.

Thanks in advanced.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

春花秋月 2025-01-03 02:16:44

我相信这是因为 source 命令特定于 MySQL 命令行客户端的实现,而不是 ActiveRecord 实现的 API 的一部分。例如,如果您尝试在 ActiveRecord 中使用 DELIMITER 命令,也会发生同样的情况。

I believe this is because the source command is specific to the implementation of the MySQL command line client, and is not part of the API implemented by ActiveRecord. The same thing would happen if you tried to use the DELIMITER command inside ActiveRecord, for example.

失眠症患者 2025-01-03 02:16:44

我最终使用sh Rake方法,以批处理模式执行sql命令 http ://dev.mysql.com/doc/refman/5.5/en/batch-mode.html

sh "mysql -u root mydb_development -e 'source import_legacy_database.sql'"

I finally used the sh Rake method and executed sql commands in batch mode http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html

sh "mysql -u root mydb_development -e 'source import_legacy_database.sql'"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文