โปรดพิจารณาคำจำกัดความของฟังก์ชันต่อไปนี้ ฉันสร้างและตั้งค่าบน 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
ฉันได้รับข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาด 1064 (42000) ที่บรรทัด 1: คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MariaDB ของคุณเพื่อดูไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ '' ที่บรรทัด 8
ขอบคุณ
done
จะเป็นคำหลักที่สงวนไว้ในmariaDB
สำหรับบรรทัดDECLARE done INT DEFAULT 0;
- person NoobEditor   schedule 21.03.2014DELIMITER //
หรืออย่างอื่นหรือไม่ - person Ravinder Reddy   schedule 21.03.2014