我正在使用Symfony2中的应用程序项目。 通过注册,每个客户端创建一个数据库。 架构由客户端登录时由验证服务创建。 应用程序需要一些数据才能工作,到目前为止,我使用了ORM fixture。 出于多种原因,我现在需要从夹具加载移动到更接近数据库。 我创建了一个存储过程(mysql),它将替换所有数据加载。该过程有效,但我需要在每个数据库中与模式一起创建此过程。 我为此目的使用doctrine raw sql,但我无法通过create procedure语句的第一行传递问题。它似乎与'delimiter $$'有关。
使用sql语句执行服务时,我得到:
“message”:“执行'delimiter $$ \ r \ n \ r \ n时发生异常\ n \ nRREATE DEFINER = root
@`localhost”
这似乎是因为换行,但我不确定。有人知道某种方式吗?
答案 0 :(得分:4)
问题来自于delimiter命令只能在使用所讨论的http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html的MySQL命令行工具时使用。要解决此问题,您需要删除更改分隔符的部分并使用;作为你的分隔符。请考虑以下事项:
delimiter $$
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END $$
以上情况不会奏效:
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
答案 1 :(得分:0)
您应该覆盖CREATE DEFINER,因为在您将启动过程的系统中,root @ localhost不是mysql或数据库用户。
答案 2 :(得分:0)
我知道这是一个迟到的答案,但这篇文章在Google的结果中很高,我在其他地方找不到其他答案,所以我想发布一个解决方案如何克服这个问题。
长话短说,一个人必须在查询中使用\ n字符打破行,例如:
$this->addSql(
"CREATE EVENT event_example ON SCHEDULE EVERY 15 MINUTE ".
"ON COMPLETION NOT PRESERVE ENABLE DO BEGIN\n".
"INSERT INTO archives SELECT * FROM records;\n".
"DELETE FROM records;\n".
"END"
);