我编写了一个存储过程,并希望在Rake任务中执行它。
在调用存储过程之前(通过“call”语句)我应该使用source命令创建过程,该命令因以下错误而失败:
Mysql2 ::错误:您的SQL语法中有错误;检查手册 对应于您的MySQL服务器版本,以获得正确的语法 在第1行:source的'source import_legacy_database.sql'附近使用 import_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()"
失败,因为数据库找不到该过程,因为它不存在。
先谢谢。
答案 0 :(得分:2)
我认为这是因为source
命令特定于MySQL命令行客户端的实现,并且不是ActiveRecord实现的API的一部分。例如,如果您尝试在ActiveRecord中使用DELIMITER
命令,则会发生同样的事情。
答案 1 :(得分:1)
我最终使用sh Rake方法并以批处理模式http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html
执行sql命令sh "mysql -u root mydb_development -e 'source import_legacy_database.sql'"