‘DELIMITER $$’附近的错误

当我从mysql控制台或MySQL Workbench更改Delimeter时我没有收到任何错误,但当我在轨道上的ruby中嵌入相同的代码时出现错误

mysql> DELIMITER $$ mysql> 

没有错误。

 ActiveRecord::Base.connection.execute(%Q{ DELIMITER $$ }) 

得到:

 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: 

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 )。

最佳答案是正确的(Rails无法执行DELIMITER因为它是一个MYSQL命令),但@ ishandutta2007的后续问题没有得到解答,所以我会在这里回答。

DELIMITER经常用于包装mysql函数和过程体; 要在rails中实现这一点,只需将过程体包装在它自己的execute语句中。

例如,代码可能如下所示:

 execute <<-SQL DROP FUNCTION IF EXISTS MyFunc; DELIMITER $$ CREATE FUNCTION My Func . . . $$ DELIMITER ; SQL 

而是成为以下,通过重新定义分隔符,多个execute调用充当“范围”:

 execute 'DROP FUNCTION IF EXISTS MyFunc' execute <<-SQL CREATE FUNCTION My Func . . . SQL