MySQL创建Costotramite自定义函数报1064语法错误
MySQL自定义函数1064语法错误修复
你代码里的语法问题共2处:
NO SQL是函数特性声明,语法要求必须放在RETURNS子句之后、BEGIN关键字之前,不能写在BEGIN块内部。BEGIN块内所有DECLARE变量声明语句必须集中放在块的最开头,不能在SET这类执行语句之后再写DECLARE声明,你的代码在SET porcentaje = 0.1之后才声明CostoLicitacion,违反了该语法规则。
另外如果用MySQL命令行或普通客户端执行函数创建语句,需要先临时修改分隔符,避免客户端读到块内的分号就提前截断语句导致报错。
修复后的可执行代码
-- 临时修改分隔符为//,避免块内分号触发提前执行 DELIMITER // CREATE FUNCTION `Costotramite` (monto INT) RETURNS INTEGER NO SQL BEGIN -- 所有变量声明统一放在块最开头 DECLARE porcentaje FLOAT; DECLARE CostoLicitacion INTEGER; -- 声明完成后再写赋值、计算逻辑 SET porcentaje = 0.1; SET CostoLicitacion = monto * porcentaje; RETURN CostoLicitacion; END // -- 恢复默认分隔符为分号 DELIMITER ;
简化版写法
你的函数逻辑不需要声明多余中间变量,可以直接返回计算结果,代码更简洁:
DELIMITER // CREATE FUNCTION `Costotramite` (monto INT) RETURNS INTEGER NO SQL BEGIN RETURN monto * 0.1; END // DELIMITER ;
内容的提问来源于stack exchange,提问作者JN1997
相关产品推荐
相关产品推荐

