Problems with mysql create procedure from doctrine raw sql(mysql从学说原始sql创建过程的问题)
问题描述
我正在使用 Symfony2 中的一个应用程序项目.通过注册,每个客户都会创建一个数据库.模式是在客户端登录时由验证服务创建的.应用程序需要一些数据才能工作,到目前为止,我使用了 ORM 固定装置.由于多种原因,我现在需要从固定装置负载转移到更接近数据库.我创建了一个存储过程(mysql),它将替换所有数据加载.该过程有效,但我需要在每个数据库中与架构一起创建此过程.为此,我使用了学说原始 sql,但我无法通过 create procedure 语句的第一行传递问题.似乎与'delimiter $$'有关.
I am working with an application project in Symfony2. By registration, per client, a database is created. Schemas are created by a validation service when the client logs on. The application needs some data to work, and so far, I used ORM fixtures. For a number of reasons, I now need to move from fixtures load to get more close to the database. I have created a stored procedure (mysql) which will replace all data loading. The procedure works, but I need to create this procedure in each database together with the schema. I use doctrine raw sql for this purpose but I cannot get pass a problem with the first lines of the create procedure statement. It seems it's got to do with the 'delimiter $$'.
在使用 sql 语句执行服务时,我得到:"message":"执行 'delimiter $$
CREATE DEFINER=root
@`localhost"
While executing the service with the sql statement i get:
"message":"An exception occurred while executing 'delimiter $$
CREATE DEFINER=root
@`localhost"
这似乎是因为换行但我不确定.有谁知道解决这个问题的方法吗?
It seems to be because of line-breaks but I am not sure. Anyone knows of some way around this?
推荐答案
问题在于delimiter命令只能在使用MySQL命令行工具时使用,如讨论http://dev.mysql.com/doc/refman/5.1/en/stored-programs-定义.html.要解决此问题,您需要删除要更改分隔符的部分并使用 ;作为你的分隔符.考虑以下几点:
The problem comes from the fact that delimiter command can only be used when using the MySQL Command-Line Tool as discussed http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html. To fix this problem you need to remove the part where you are changing the delimiter and just use ; as your delimiter. Consider the following:
delimiter $$
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END$$
上述方法无效,但以下方法有效:
The above will not work however the following will:
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
这篇关于mysql从学说原始sql创建过程的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:mysql从学说原始sql创建过程的问题


- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- SQL 临时表问题 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01