簡體   English   中英

MySQL:使用嵌套 If 給出語法錯誤的存儲過程的簡單更新查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM