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

TiDB创建存储过程触发SQL错误1064,请求排查原因

存储过程SQL错误1064的排查与修复

你的存储过程触发1064语法错误,核心原因及修复方案如下:

问题分析

  1. 变量i未声明初始化:直接使用循环变量i但未在存储过程开头声明,也未赋予初始值,违反SQL语法规范。
  2. 循环无递增逻辑:即使变量可用,当前循环没有对i进行递增操作,会导致无限循环触发异常。
  3. DELIMITER语法细节:原代码最后DELIMITER;缺少空格,标准写法应为DELIMITER ;。
  4. 手机号生成逻辑瑕疵:原代码生成的手机号会超出11位长度,需修正随机数范围。

修复后的存储过程代码

DELIMITER $$
CREATE PROCEDURE recursive_insert(IN max_val INT)
BEGIN
    -- 声明并初始化循环变量
    DECLARE i INT DEFAULT 0;
    WHILE i < max_val DO
        INSERT into app_user(`name`,`email`,`phone`,`gender`,`password`,`age`,`location`)
        VALUES(
            CONCAT('sure',i),
            '12354@gmail.com',
            CONCAT('18', FLOOR(RAND() * 900000000 + 100000000)),
            FLOOR(RAND()*2),
            UUID(),
            FLOOR(RAND()*100),
            'washington'
        );
        -- 循环变量递增
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER ;

错误信息翻译:
1064 - 你的SQL语法存在错误;请检查与你的TiDB版本对应的手册,以获取在第1行第16位附近使用"PROCEDURE recursive_insert(IN max_val INT)
BEGIN
WHILE i < max_val DO
INSERT into
app_user(name,email,phone,gender,password,age,location)
VALUES(CONCAT('user',i),'12354@qq.com',CONCAT('18',FLOOR(RAND()*
((999999999)+1000000000))),FLOOR(RAND()*2),UUID(),FLOOR(RAND()*100),'深圳');
END WHILE;
END"的正确语法

内容的提问来源于stack exchange,提问作者Kec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:12:45