'DELIMITER $$'附近的错误

时间:2013-03-27 10:41:07

标签: mysql ruby-on-rails ruby 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: 

2 个答案:

答案 0 :(得分:4)

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),那将无济于事。

答案 1 :(得分:2)

top answer是正确的(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