6

当我从 mysql 控制台或 MySQL Workbench 更改 Delimeter 时,我没有收到任何错误,但是当我在 ruby​​ on rails 中嵌入相同的代码时,我收到错误

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: 
4

2 回答 2

4

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

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

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

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
于 2015-05-19T19:42:40.567 回答
3

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

于 2013-03-27T10:55:44.750 回答