You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:20:15