我创建了一个存储过程,其中每个东西都是根据的 代码
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;
答案 0 :(得分:1)
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;
一样,并且不会将终结符从$$
更改回{{1它在语法上也是不正确的。 ;
(带空格分隔符)只需将分隔符更改回DELIMITER ;
。为什么?例如,您的程序中的代码由;
终止。如果忘记执行;
,MySQL将无法在运行时终止过程语句 - 如果之后执行/调用该过程,则会出现错误。
您可以进一步阅读有关此事的MySQL文档。希望解释有所帮助。
答案 1 :(得分:0)
其工作
CREATE 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 $$