MySQL存储过程语法错误排查:查找1000以内质数
MySQL存储过程查找质数的语法错误修正
错误原因
你的代码中LEAVE;语句语法不正确——MySQL要求LEAVE必须指定要退出的标签名,直接使用无参数的LEAVE会导致语法解析失败,因为数据库无法确定要退出哪个循环或代码块。
修正后的代码
DELIMITER // CREATE PROCEDURE findPrimes() BEGIN DECLARE n INT; DECLARE divisor INT; DECLARE isPrime BOOLEAN; SET n = 2; SET @result = ''; -- 初始化结果变量,避免开头出现多余分隔符 WHILE n <= 1000 DO SET divisor = 2; SET isPrime = TRUE; -- 给内层循环添加标签,让LEAVE可以明确目标 inner_loop: WHILE divisor * divisor <= n DO IF n % divisor = 0 THEN SET isPrime = FALSE; LEAVE inner_loop; -- 指定要退出的循环标签 END IF; SET divisor = divisor + 1; END WHILE inner_loop; -- 可选:结尾标注标签,增强可读性 IF isPrime THEN -- 初始化后,CONCAT_WS不会出现开头多余的& SET @result = CONCAT_WS('&', @result, n); END IF; SET n = n + 1; END WHILE; SELECT @result; END; // DELIMITER ; CALL findPrimes();
关键修正点
- 为内层
WHILE循环添加了inner_loop:标签,让LEAVE语句明确指向要退出的循环 - 初始化
@result为空字符串,避免第一次执行时结果开头出现不必要的&(原代码中若@result初始为NULL,CONCAT_WS会自动忽略,但显式初始化更稳妥) - 可选:在循环结尾添加标签名
END WHILE inner_loop;,提升代码可读性
内容的提问来源于stack exchange,提问作者Md. Nahid Hassan
相关产品推荐
相关产品推荐

