什么';这个MYSQL查询有什么问题?

什么';这个MYSQL查询有什么问题?,mysql,stored-procedures,Mysql,Stored Procedures,MySQL中的WHILE循环仅以END WHILE终止。你有END;结束时不正确。在结束之前结束时是导致问题的原因。您在第46行已经有了一个结束符,因此这一行正在尝试结束函数。我打赌你可以删除它。问题是,尽管它很愚蠢,但始终使用非标准符号-和的格式错误。由于我正在使用的IDE的编码或者其他一些愚蠢的东西 facepalm“结束;”结束while循环内的“开始”。正如马克所建议的那样,我会尝试不使用“开始…结束”;嗯,我已经删除了END在结束;结束时我在新代码中遇到了类似的错误…而循环也不需要开始

MySQL中的
WHILE
循环仅以
END WHILE终止。你有
END;结束时
不正确。

结束之前
结束时是导致问题的原因。您在第46行已经有了一个结束符,因此这一行正在尝试结束函数。我打赌你可以删除它。

问题是,尽管它很愚蠢,但始终使用非标准符号-和的格式错误。由于我正在使用的IDE的编码或者其他一些愚蠢的东西


facepalm

“结束;”结束while循环内的“开始”。正如马克所建议的那样,我会尝试不使用“开始…结束”;嗯,我已经删除了
END在<代码>结束;结束时我在新代码中遇到了类似的错误…而循环也不需要
开始
<代码>当。。。做结束
是正确的语法。不幸的是,这不是问题所在。正如尼尔指出的,
结束了结束
开始
向上。没问题。试过了/没有试过,没有区别。
delimiter |

CREATE FUNCTION BASE64_DECODE (input BLOB)
        RETURNS BLOB
        CONTAINS SQL
        DETERMINISTIC
        SQL SECURITY INVOKER
BEGIN
        DECLARE ret BLOB DEFAULT '';
        DECLARE done TINYINT DEFAULT 0;

        IF input IS NULL THEN
                RETURN NULL;
        END IF;

each_block:
        WHILE NOT done DO BEGIN
                DECLARE accum_value BIGINT UNSIGNED DEFAULT 0;
                DECLARE in_count TINYINT DEFAULT 0;
                DECLARE out_count TINYINT DEFAULT 3;

each_input_char:
                WHILE in_count < 4 DO BEGIN
                        DECLARE first_char CHAR(1);

                        IF LENGTH(input) = 0 THEN
                                RETURN ret;
                        END IF;

                        SET first_char = SUBSTRING(input,1,1);
                        SET input = SUBSTRING(input,2);

                        BEGIN
                                DECLARE tempval TINYINT UNSIGNED;
                                DECLARE error TINYINT DEFAULT 0;
                                DECLARE base64_getval CURSOR FOR SELECT val FROM base64_data WHERE c = first_char;
                                DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET error = 1;

                                OPEN base64_getval;
                                FETCH base64_getval INTO tempval;
                                CLOSE base64_getval;

                                IF error THEN
                                        ITERATE each_input_char;
                                END IF;

                                SET accum_value = (accum_value << 6) + tempval;
                        END;

                        SET in_count = in_count + 1;

                        IF first_char = '=' THEN
                                SET done = 1;
                                SET out_count = out_count – 1;
                        END IF;
                END; END WHILE;

                WHILE out_count > 0 DO BEGIN
                        SET ret = CONCAT(ret,CHAR((accum_value & 0xff0000) >> 16));
                        SET out_count = out_count – 1;
                        SET accum_value = (accum_value << 8) & 0xffffff;
                END; END WHILE;

        END; END WHILE;

        RETURN ret;
END |
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 '– 1;
                        END IF;
                END; END WHILE;
         ' at line 52