我已經嘗試閱讀其他幾個類似的答案,但據我所知,它們都沒有以相同的方式修復。我嘗試洗掉所有新行/標簽以嘗試洗掉不可見字符,甚至只是將其放在一行上。
一旦你超過了某個點,我就不是最擅長 SQL,所以這個問題只是我沒有意識到一些事情,但任何幫助將不勝感激。
確切的錯誤是 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 66
第 66 行就 RETURN points;在END;;
DELIMITER ;;
CREATE FUNCTION getPointValue(run_id INT)
RETURNS INT
BEGIN
DECLARE points INT DEFAULT 0;
DECLARE total_completions INT DEFAULT 1;
DECLARE place INT;
DECLARE time FLOAT(12,4);
DECLARE style INT;
DECLARE run_type INT;
DECLARE percentile FLOAT(12,4);
DECLARE total_points INT DEFAULT 3000;
DECLARE percentile_potential INT;
DECLARE temp FLOAT;
DECLARE bracket_min INT DEFAULT 0;
DECLARE bracket_max INT DEFAULT 0;
SELECT time INTO time FROM surf_run WHERE run_id = run_id;
SELECT style INTO style FROM surf_run WHERE run_id = run_id;
SELECT run_type INTO run_type FROM surf_run WHERE run_id = run_id;
SELECT COUNT(*) INTO place FROM surf_run WHERE time <= time AND style = style AND run_type = run_type AND best_run = TRUE;
SELECT COUNT(*) INTO total_completions FROM surf_run WHERE style = style AND run_type = run_type AND best = TRUE;
IF place = 1 THEN
SET points = 10000;
ELSE IF place = 2 THEN
SET points = 7500;
ELSE IF place = 3 THEN
SET points = 5000;
ELSE IF place = 4 THEN
SET points = 3500;
ELSE IF place = 5 THEN
SET points = 2500;
ELSE
SET percentile = (place / total_completions);
IF percentile <= 0.05 THEN
SET percentile_potential = 3000;
SET points = 2000;
SET bracket_min = 0;
SET bracket_max = total_completions * 0.05;
ELSE IF percentile <= 0.10 THEN
SET bracket_max = total_completions * 0.05 1;
SET bracket_max = total_completions * 0.1;
SET percentile_potential = 2000;
SET points = 1250;
ELSE IF percentile <= 0.15 THEN
SET bracket_max = total_completions * 0.1 1;
SET bracket_max = total_completions * 0.15;
SET percentile_potential = 1250;
SET points = 750;
ELSE IF percentile <= 0.25 THEN
SET bracket_max = total_completions * 0.15 1;
SET bracket_max = total_completions * 0.25;
SET percentile_potential = 750;
SET points = 10;
END IF;
SET points = points GREATEST(0, ROUND(percentile_potential - percentile_potential * LOG(place, bracket_max)));
END IF;
RETURN points;
END;;
DELIMITER ;
uj5u.com熱心網友回復:
常見的“美”語法錯誤。
您使用ELSE IF- 在這種情況下IF不是替代分支而是單獨的IF陳述句。因此,您會獲得多個IF陳述句,否則END IF會產生錯誤。
調查MySQL 8.0 參考手冊 / ... / IF 陳述句-ELSEIF不包含/允許空格字符。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a4450a40ab690e82ffa18bb3978e68c0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417219.html
標籤:
上一篇:為什么程式沒有輸出?
