首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL神秘误差

MySQL神秘误差
EN

Stack Overflow用户
提问于 2014-04-03 10:58:37
回答 1查看 50关注 0票数 0

PHPMyAdmin一直告诉我,我在第41行(第三行)有一个错误。我似乎找不到它,任何帮助/建议都将不胜感激。我已经检查了IF-然后语法和游标。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-03 11:06:54

您的问题非常常见,这是因为MySQL在看到“;;”时会停止创建过程。

您需要使用分隔符来包装您的过程;)

分隔符$开始声明done布尔值默认值为false;声明a文本;为从cards选择mana_cost声明cur游标;

为NOT done=TRUE声明继续处理程序;

开放cur

read_loop :循环

代码语言:javascript
复制
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循环;//第41行关闭cur;END $ *分隔符;*

您应该尝试这样的方法,并查看关于划界器和MySQL笑话的文档:P

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22835469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档