TiDB创建存储过程触发SQL错误1064,请求排查原因
存储过程SQL错误1064的排查与修复
你的存储过程触发1064语法错误,核心原因及修复方案如下:
问题分析
- 变量
i未声明初始化:直接使用循环变量i但未在存储过程开头声明,也未赋予初始值,违反SQL语法规范。 - 循环无递增逻辑:即使变量可用,当前循环没有对
i进行递增操作,会导致无限循环触发异常。 - DELIMITER语法细节:原代码最后
DELIMITER;缺少空格,标准写法应为DELIMITER ;。 - 手机号生成逻辑瑕疵:原代码生成的手机号会超出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,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
相关产品推荐
相关产品推荐

