[英]MySQL: SImple update query for stored procedure with nested If giving syntax error
我正在創建一個 SQL 查詢來創建一個存儲過程來更新表的 Leaders_Score 和 Leaders_Icon 列,比如 chicago_public_schools。 我已經一次又一次地檢查了語法,但無法弄清楚為什么會出現語法錯誤,任何人都可以告訴我這段代碼中做錯了什么:
DELIMITER
;
CREATE PROCEDURE UPDATELEADERSSCORE(
IN inSchoolID INTEGER,
IN inLeaderScore INTEGER
) LANGUAGE SQL
BEGIN
UPDATE
chicago_public_schools
SET
Leaders_Score = inLeaderScore
WHERE
School_ID = inSchoolID; IF inLeaderScore > 80 AND inLeaderScore < 99 THEN
UPDATE
chicago_public_schools
SET
Leaders_Icon = 'Very Strong'
WHERE
School_ID = inSchoolID; ELSEIF inLeaderScore > 60 AND inLeaderScore < 79 THEN
UPDATE
chicago_public_schools
SET
Leaders_Icon = 'Strong'
WHERE
School_ID = inSchoolID; ELSEIF inLeaderScore > 40 AND inLeaderScore < 59 THEN
UPDATE
chicago_public_schools
SET
Leaders_Icon = 'Average'
WHERE
School_ID = inSchoolID; ELSEIF inLeaderScore > 20 AND inLeaderScore < 39 THEN
UPDATE
chicago_public_schools
SET
Leaders_Icon = 'Weak'
WHERE
School_ID = inSchoolID; ELSEIF inLeaderScore > 0 AND inLeaderScore < 19 THEN
UPDATE
chicago_public_schools
SET
Leaders_Icon = 'Very weak'
WHERE
School_ID = inSchoolID; ENDIF;
END;
DELIMITER
;
這是錯誤:
CREATE PROCEDURE UPDATELEADERSSCORE(
IN inSchoolID INTEGER,
IN inLeaderScore INTEGER
) LANGUAGE SQL
BEGIN
UPDATE
chicago_public_schools
SET
Leaders_Score = inLeaderScore
WHERE
School_ID = inSchoolID
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 11
問候,T
看起來您正在嘗試設置值,然后是基於該值的類別。 使用 CASE 語句會更清晰,例如:
UPDATE chicago_public_schools
SET
Leaders_Score = inLeaderScore,
Leaders_Icon = CASE WHEN inLeaderScore > 80 THEN 'Very Strong'
WHEN inLeaderScore > 60 THEN 'Strong'
WHEN inLeaderScore > 40 THEN 'Average'
WHEN inLeaderScore > 20 THEN 'Weak'
WHEN inLeaderScore > 0 THEN 'Very Weak'
END
WHERE
School_ID = inSchoolID;
我看到幾個問題。
DELIMITER
必須在同一行設置分隔符。 您不能在分隔符前添加換行符。
錯誤的:
DELIMITER
;
正確的:
DELIMITER ;
接下來,將 DELIMITER 設置為;
在編寫包含的存儲例程之前;
例程主體中的語句終止符。 您需要將定界符定義為不同於默認語句終止符的內容,因此例程主體中的分號不會終止整個 CREATE PROCEDURE 語句。 我認為您需要重新閱讀https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
最后, IF
復合語句的結尾是END IF;
, 不是ENDIF;
. 參見https://dev.mysql.com/doc/refman/8.0/en/if.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.