0

当尝试在 mysql 5.1.47-community 中创建一个简单的过程时,每次我尝试了一切都会失败!甚至像这样简单的事情!

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

错误是

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

4

3 回答 3

0

您提供的错误消息与您粘贴的代码不对应。您指的是您正在运行的 SQL 中某处的“mydb”,但它不在您提出问题的代码中的任何位置。

您提供的代码应该可以正常工作,因为我没有看到任何语法错误,您可能只需要给它一个数据库来处理(test在我的例子中是“”,也许它应该是“ mydb”?)。

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

DELIMITER ;

CALL test.two;

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

编辑
它可能是delimiter命令。您将分隔符更改为//而不是默认的;. 因此,也许您已经运行了该命令(并将会话的分隔符更改为 //),然后尝试USE mydb;;不再被识别为会话的有效分隔符的地方运行,这可能会给您带来错误。尝试delimiter ;在您的使用行之前放置,看看是否有帮助(然后在定义存储过程后再次使用它,以便您可以调用它)。这只是一个理论,因为我不确定分隔符命令的复杂性。

于 2010-06-07T14:39:09.333 回答
0

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

于 2010-06-07T17:04:11.630 回答
0

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

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

这导致了SQL ERROR (1064) 因为我不知道在使用客户端程序时需要分隔符定义存储过程

将上述内容更改为以下内容后:

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;
于 2021-07-02T14:29:12.113 回答