当尝试在 mysql 5.1.47-community 中创建一个简单的过程时,每次我尝试了一切都会失败!甚至像这样简单的事情!
DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//
错误是
错误:错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“mydb”附近使用正确的语法
当尝试在 mysql 5.1.47-community 中创建一个简单的过程时,每次我尝试了一切都会失败!甚至像这样简单的事情!
DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//
错误是
错误:错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“mydb”附近使用正确的语法
您提供的错误消息与您粘贴的代码不对应。您指的是您正在运行的 SQL 中某处的“mydb”,但它不在您提出问题的代码中的任何位置。
您提供的代码应该可以正常工作,因为我没有看到任何语法错误,您可能只需要给它一个数据库来处理(test
在我的例子中是“”,也许它应该是“ mydb
”?)。
DELIMITER //
CREATE PROCEDURE test.two ()
begin
SELECT 1+1;
end;
//
DELIMITER ;
CALL test.two;
但是,我怀疑您遇到的错误是您没有向我们展示的 SQL 中的一行。
编辑
它可能是delimiter
命令。您将分隔符更改为//
而不是默认的;
. 因此,也许您已经运行了该命令(并将会话的分隔符更改为 //),然后尝试USE mydb;
在;
不再被识别为会话的有效分隔符的地方运行,这可能会给您带来错误。尝试delimiter ;
在您的使用行之前放置,看看是否有帮助(然后在定义存储过程后再次使用它,以便您可以调用它)。这只是一个理论,因为我不确定分隔符命令的复杂性。
删除最后的分隔符“end”而不是“end;”
我在使用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;