创建过程失败?

时间:2010-06-07 14:29:27

标签: mysql stored-procedures mysql-error-1064

当试图在mysql 5.1.47-community中创建一个简单的过程时,每次尝试所有内容时它都会失败! 甚至像这样的简单事情!

DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//

错误是

  

错误:错误1064:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“mydb”附近使用正确的语法

3 个答案:

答案 0 :(得分:0)

您提供的错误消息与您粘贴的代码不对应。你在SQL中运行的某个地方指的是“mydb”,但是你在问题的代码中找不到它。

你给出的代码应该可以正常工作,因为我没有看到语法错误,你可能只需要给它一个数据库来处理(在这种情况下我可以使用“test”,也许它应该是“{ {1}}“为了你?”。

mydb

但是,我怀疑你得到的错误是你的SQL中的一行,而你没有向我们展示。

修改
它可能是DELIMITER // CREATE PROCEDURE test.two () begin SELECT 1+1; end; // DELIMITER ; CALL test.two; 命令。您将分隔符更改为delimiter而不是默认//。所以也许您已经运行了该命令(并将会话的分隔符更改为//),然后尝试运行;,其中USE mydb;不再被识别为会话的有效分隔符,这可能会给你错误。尝试将;放在使用行之前,看看是否有帮助(然后在定义存储过程后再次使用它,以便调用它)。这只是一个理论,因为我不确定定界符命令的复杂性。

答案 1 :(得分:0)

删除最终分隔符“end”而不是“end;”

答案 2 :(得分:0)

我在使用 heidisql 作为前端输入 SQL 时遇到了同样的问题。我的第一次尝试是:

CREATE PROCEDURE Add_Two (IN someNumber int, OUT result INT)
   BEGIN
     SELECT someNumber +2 INTO result;
   END

这导致了 SQL ERROR (1064),因为我不知道在使用客户端程序时需要 delimiterdefine the stored procedures

将上面的改成这样后:

DELIMITER //
CREATE PROCEDURE Add_Two(IN someNumber int, OUT result INT)
   BEGIN
     SELECT someNumber +2 INTO result;
   END
// 

成功了。

调用示例

 SET @someNumber :=8;
 CALL Add_Two(@someNumber, @result);
 SELECT @result;