MySQL神秘错误

标签 mysql sql loops phpmyadmin cursor

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/

相关文章:

c - C中的哨兵循环执行

loops - 如何仅迭代一次java流

php - SQL SELECT 语句从具有外键和关联关系的多个表中提取数据

php - mysql PHP 中连接表的问题

c++ - 如何修复 'Undefined symbols for architecture x86_64: "_get_driver_instance"' 链接器错误

php - 优化自定义 WordPress SQL 查询

SQL 生成序列号

php - mysql varchar with utf8mb4最大字符存储容量

mysql - 每天在大表上添加和删除索引是一个好习惯吗?

sql - 带有内部 SELECT 语句的 JPA Criteria Builder 查询