MariaDB在MySQL上运行时创建函数时出错 请考虑以下函数定义。我在MySQL 5.1上创建并设置了它,但在MariaDB 5.5中失败了 CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `weighted_mean_by_kpi`(`KPIID` INT, `employee_id` INT, `date` DATE) RETURNS decimal(6,3) LANGUAGE SQL DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE done INT DEFAULT 0; DECLARE rating_number INT DEFAULT 0; DECLARE rating_count INT DEFAULT 0; DECLARE rating_total INT DEFAULT 0; DECLARE weighted_total DOUBLE DEFAULT 0; DECLARE cur CURSOR FOR SELECT COUNT(rating), rating FROM employees_KPIs WHERE kpi_id = KPIID AND employee_id = employee_id AND employees_KPIs.created_at LIKE CONCAT("%",DATE_FORMAT(date,'%Y-%m'),"%") GROUP BY rating; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; RATING: LOOP FETCH cur INTO rating_count, rating_number; IF done = 1 THEN LEAVE RATING; END IF; SET weighted_total = weighted_total + (rating_number * rating_count); SET rating_total = rating_total + rating_count; END LOOP RATING; return (weighted_total/rating_total); #return (weighted_total); CLOSE cur; END

MariaDB在MySQL上运行时创建函数时出错 请考虑以下函数定义。我在MySQL 5.1上创建并设置了它,但在MariaDB 5.5中失败了 CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `weighted_mean_by_kpi`(`KPIID` INT, `employee_id` INT, `date` DATE) RETURNS decimal(6,3) LANGUAGE SQL DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE done INT DEFAULT 0; DECLARE rating_number INT DEFAULT 0; DECLARE rating_count INT DEFAULT 0; DECLARE rating_total INT DEFAULT 0; DECLARE weighted_total DOUBLE DEFAULT 0; DECLARE cur CURSOR FOR SELECT COUNT(rating), rating FROM employees_KPIs WHERE kpi_id = KPIID AND employee_id = employee_id AND employees_KPIs.created_at LIKE CONCAT("%",DATE_FORMAT(date,'%Y-%m'),"%") GROUP BY rating; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; RATING: LOOP FETCH cur INTO rating_count, rating_number; IF done = 1 THEN LEAVE RATING; END IF; SET weighted_total = weighted_total + (rating_number * rating_count); SET rating_total = rating_total + rating_count; END LOOP RATING; return (weighted_total/rating_total); #return (weighted_total); CLOSE cur; END,mysql,mariadb,Mysql,Mariadb,我得到以下错误: 第1行出现错误1064(42000):SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以了解第8行“”附近要使用的正确语法 谢谢Mysql看到了“;”函数中的分隔符,并打断CREATE function语句 要避免这种情况,请在定义函数之前更改分隔符,然后再将其更改回: 比如: DELIMITER // -- your create function definition statement here // DELIMITER ; 与您的代码一样,第一个

我得到以下错误:

第1行出现错误1064(42000):SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以了解第8行“”附近要使用的正确语法


谢谢

Mysql看到了“;”函数中的分隔符,并打断
CREATE function
语句

要避免这种情况,请在定义函数之前更改分隔符,然后再将其更改回:

比如:

DELIMITER //

-- your create function definition statement here

//
DELIMITER ;

与您的代码一样,第一个
分号位于
第8行
,它试图执行分号直到“;”,语法是无效的,因为它是不完整的(
BEGIN
而没有
END
)。

不知道mariaDB…但是,我强烈地感觉到有错误,因为
done
将是
mariaDB
DECLARE done INT DEFAULT 0中的保留关键字
您是在重新定义了delimiter的值后执行此操作的,比如
delimiter/
还是其他什么?