gpt4 book ai didi

mysql - 无法找到mysql存储过程代码中的错误

转载 作者:行者123 更新时间:2023-11-29 11:44:17 25 4
gpt4 key购买 nike

我创建了一个存储过程,其中的所有内容都是根据代码

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;

错误: enter image description here

最佳答案

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com