我知道这个问题已被问过不同形式的一堆,但我所看到的(相当多)没有一个似乎在我的具体案例中帮助我。我写了一些函数和程序,我总是在同一个地方得到同样的错误。这是我的代码:
DELIMITER |
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS;
CREATE PROCEDURE STUDENTS_BY_STATUS (sts VARCHAR(10))
BEGIN
SELECT BannerId, Name FROM STUDENT WHERE Status = sts;
END |
DELIMITER;
这发生在我的所有程序函数上,这个错误:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法
靠近' CREATE PROCEDURE STUDENTS_BY_STATUS(sts VARCHAR(10)) 开始 选择BannerId,'在第2行
在我的另一个上:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法
near' CREATE FUNCTION GoodGrade(letGrade VARCHAR(2))RETURNS int 开始 DECLARE v'在第2行
无论我是否使用|都会发生这种情况或者//作为DELIMITER ......有人可以告诉我这里我做错了什么吗?谢谢!
答案 0 :(得分:1)
你已经更改了分隔符,编写了一个语句,然后根据你的新定义没有分隔它
更改行
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS;
到
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS |
这在初始错误消息中并不明显,但在过程定义后重置分隔符时出现另一个错误。你需要一个空格';'那个。
所以改变
DELIMITER;
到
DELIMITER ;
NB “;”的另一个用途在您的过程定义中是正确的,因为您希望一起处理create语句中的所有内容。