我创建了一个存储过程,其中的所有内容都是根据 代码
DELIMITER $$;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mark_all_read`(IN user_name VARCHAR(50),IN group_name VARCHAR(50),IN choice CHAR(10),IN nid CHAR(30))
BEGIN
IF choice = 'all' THEN
UPDATE notifications SET STATUS = 'read' WHERE USER = user_name AND groupId = group_name;
ELSE
UPDATE notifications SET STATUS = 'read' WHERE USER = user_name AND groupId = group_name AND noticationId = nid;
END IF;
END $$
DELIMITER;
最佳答案
1.) 检查第一条语句DELIMITER $$;
,它应该[只是]是DELIMITER $$
,不带分号
2.) 检查最后一条语句DELIMITER;
,它应该是DELIMITER ;
,中间有空格
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `mark_all_read`(IN user_name VARCHAR(50),IN group_name VARCHAR(50),IN choice CHAR(10),IN nid CHAR(30))
BEGIN
IF choice = 'all' THEN
UPDATE notifications SET STATUS = 'read' WHERE USER = user_name AND groupId = group_name;
ELSE
UPDATE notifications SET STATUS = 'read' WHERE USER = user_name AND groupId = group_name AND noticationId = nid;
END IF;
END$$
DELIMITER ;
说明:
1.) DELIMITER $$;
表示您正在将默认分隔符从 ;
修改为 $$;
。但是,在代码末尾,CREATE PROCEDURE
语句由 $$
(而不是 $$;
)终止,MySQL 会这样做不认识。为了使解决方案简单,我使用了 $$
并用 $$
结束 CREATE PROCEDURE
。您需要修改分隔符,因为您的过程中有分号 ;
分隔符,否则 MySQL 将不知道哪个分隔符终止 CREATE PROCEDURE
语句。
2.) DELIMITER;
(不带空格分隔符)意味着您正在终止 DELIMITER
语句,就像 SELECT * FROM TABLE;
一样,而不是将终止符从 $$
更改回 ;
这在语法上也是不正确的。 DELIMITER ;
(带有空格分隔符)只需将分隔符更改回 ;
。为什么?其一,程序中的代码以 ;
终止。如果您忘记执行DELIMITER ;
,MySQL 将无法在运行时终止过程语句 - 如果您随后执行/调用该过程,您将收到错误。
您可以进一步阅读有关此事的 MySQL 文档。希望解释有所帮助。
关于mysql - 无法找到mysql存储过程代码中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224489/