mysql - 'DELIMITER $$' 附近的错误

标签 mysql ruby-on-rails ruby delimiter

当我从 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: 

最佳答案

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

关于mysql - 'DELIMITER $$' 附近的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656876/

相关文章:

mysql - MariaDB:存储过程中的 SELECT 锁定行

mysql - Hive建表失败

javascript - 如果选中则禁用表单

ruby-on-rails - rails 形式的隐藏字段

ruby-on-rails - 如何使用 amazon cognito 实现密码过期和密码可存档功能

mysql - 检查记录是否包含 IN 运算符的所有值

php - 使用文本框 mysql php 从 mysql 数据库中取出号码

css - Bootstrap col-md-4 h2 不以移动设备为中心

ruby - 在 Ubuntu 14.04 中使用 Curl 安装 RVM 时出错

ruby - 基于 Rack 的 Web 服务器是否代表 FastCGI 协议(protocol)?