ish*_*007 5 ruby mysql ruby-on-rails delimiter
当我从 mysql 控制台或 MySQL Workbench 更改 Delimeter 时,我没有收到任何错误,但是当我在 ruby on rails 中嵌入相同的代码时,我收到了错误
mysql> DELIMITER $$
mysql>
Run Code Online (Sandbox Code Playgroud)
没有错误。
但
ActiveRecord::Base.connection.execute(%Q{
DELIMITER $$
})
Run Code Online (Sandbox Code Playgroud)
给出:
ActiveRecord::StatementInvalid: 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 'DELIMITER $$' at line 1:
Run Code Online (Sandbox Code Playgroud)
最上面的答案是正确的(Rails 无法执行DELIMITER,因为它是 MYSQL 命令),但是 @ishandutta2007 的后续问题没有得到解答,所以我将在这里回答。
DELIMITER常用于包装mysql函数和过程体;要在 Rails 中实现此目的,只需将过程主体包装在它自己的执行语句中。
例如,代码可能如下所示:
execute <<-SQL
DROP FUNCTION IF EXISTS MyFunc;
DELIMITER $$
CREATE FUNCTION My Func
. . .
$$
DELIMITER ;
SQL
Run Code Online (Sandbox Code Playgroud)
相反,将变成以下内容,execute通过重新定义分隔符来充当“范围界定”:
execute 'DROP FUNCTION IF EXISTS MyFunc'
execute <<-SQL
CREATE FUNCTION My Func
. . .
SQL
Run Code Online (Sandbox Code Playgroud)
DELIMITER实际上是MySQL命令行设置,而不是SQL: http: //dev.mysql.com/doc/refman/5.0/en/mysql-commands.html。这意味着您不能以这种方式设置分隔符。
ActiveRecord::Base.connection.execute最重要的是,如果您只允许一次开箱即用地执行一个语句,那也无济于事(请参阅http://www.seanr.ca/tech/?p=75)。