“DELIMITER $$”附近出错
Posted
技术标签:
【中文标题】“DELIMITER $$”附近出错【英文标题】:Error near 'DELIMITER $$' 【发布时间】:2013-03-27 10:41:07 【问题描述】:当我从 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:
【问题讨论】:
【参考方案1】:top answer 是正确的(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
【讨论】:
【参考方案2】: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 执行以下操作?[CODE] DELIMITER $$ CREATE PROCEDURE XYZ(IN t INT) BEGIN BLA BLA ... END$$ DELIMITER ;[/CODE]以上是关于“DELIMITER $$”附近出错的主要内容,如果未能解决你的问题,请参考以下文章
Datasatge使用Datastage装载数据时候,报错:Missing record delimiter “”,saw EOF instead