声明VARCHAR时MySQL存储过程创建失败求助
问题分析:新增VARCHAR变量导致存储过程创建失败
你碰到的核心问题是**delimiter是MySQL的保留关键字**,不能直接用作存储过程内的变量名。
当你在存储过程中声明DECLARE delimiter VARCHAR(1);时,MySQL会把delimiter识别为系统命令关键字(就是你用来修改语句分隔符的DELIMITER),而非自定义变量,这会导致语法解析异常,最终表现为存储过程创建失败,甚至可能没有明确报错信息。
可正常运行的代码:
DELIMITER // CREATE PROCEDURE evt_find_events(IN conference_id_param BIGINT) BEGIN DECLARE iii INT DEFAULT 0; DECLARE startindex INT DEFAULT 1; DECLARE endindex INT DEFAULT 1; END // DELIMITER ;
存在问题的代码(变量名使用了关键字):
DELIMITER // CREATE PROCEDURE evt_find_events(IN conference_id_param BIGINT) BEGIN DECLARE iii INT DEFAULT 0; DECLARE startindex INT DEFAULT 1; DECLARE endindex INT DEFAULT 1; DECLARE delimiter VARCHAR(1); -- 这里使用了MySQL保留关键字 END // DELIMITER ;
修复后的代码:
只需要把变量名改成非保留关键字即可,比如my_delimiter:
DELIMITER // CREATE PROCEDURE evt_find_events(IN conference_id_param BIGINT) BEGIN DECLARE iii INT DEFAULT 0; DECLARE startindex INT DEFAULT 1; DECLARE endindex INT DEFAULT 1; DECLARE my_delimiter VARCHAR(1) DEFAULT ','; -- 修改为非关键字变量名 END // DELIMITER ;
内容的提问来源于stack exchange,提问作者Dave Lowe
相关产品推荐
相关产品推荐

