PHPMyAdmin 不断告诉我,我在第 41 行(倒数第三行)处遇到错误。我似乎找不到它,任何帮助/建议将不胜感激。我已经仔细检查了 IF-THEN 语法和游标。
BEGIN
DECLARE `done` BOOLEAN DEFAULT false;
DECLARE `a` TEXT;
DECLARE `cur` CURSOR FOR SELECT `mana_cost` FROM `cards`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done`=TRUE;
OPEN `cur`;
read_loop : LOOP
FETCH `cur` INTO `a`;
IF `done`
THEN LEAVE read_loop;
END IF;
IF `a` LIKE '%{B}%'
THEN
UPDATE `cards` SET `color` = 'BLACK '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{G}%'
THEN
UPDATE `cards` SET `color` = 'GREEN '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{U}%'
THEN
UPDATE `cards` SET `color` = 'BLUE '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{W}%'
THEN
UPDATE `cards` SET `color` = 'WHITE '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{R}%'
THEN
UPDATE `cards` SET `color` = 'RED '
WHERE `mana_cost` = `a`;
END IF;
END LOOP; //line 41
CLOSE `cur`;
END
最佳答案
你的问题很常见,这是因为MySQL在看到“;”时停止创建过程
您需要使用 DELIMITER 来包装您的过程;)
分隔符$
开始
DECLARE done
BOOLEAN DEFAULT false;
声明a
文本;
声明 cur
游标,用于从 cards
中选择 mana_cost
;
声明未找到集的继续处理程序 done
=TRUE;
打开cur
;
读取循环:循环
FETCH `cur` INTO `a`;
IF `done`
THEN LEAVE read_loop;
END IF;
IF `a` LIKE '%{B}%'
THEN
UPDATE `cards` SET `color` = 'BLACK '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{G}%'
THEN
UPDATE `cards` SET `color` = 'GREEN '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{U}%'
THEN
UPDATE `cards` SET `color` = 'BLUE '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{W}%'
THEN
UPDATE `cards` SET `color` = 'WHITE '
WHERE `mana_cost` = `a`;
ELSE IF `a` LIKE '%{R}%'
THEN
UPDATE `cards` SET `color` = 'RED '
WHERE `mana_cost` = `a`;
END IF;
结束循环;//第41行
关闭 cur
;
结束 $
*分隔符;*
您应该尝试类似的操作并查看有关 DELIMITER 和 MySQL 笑话的文档:P
关于MySQL神秘错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835469/