【问题标题】:Mysql CASE NOT FOUND for CASE STATEMENT on a Stored ProcedureMysql CASE NOT FOUND 用于存储过程上的 CASE STATEMENT
【发布时间】:2011-10-24 19:57:21
【问题描述】:

我正在尝试创建一个包含多个 CASE STATEMENTS 的存储过程 我有以下存储过程:

BEGIN
CASE @olds
WHEN 'emp' THEN
    CASE @news
    WHEN 'loc' THEN
        UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqloc;
        UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'vis' THEN
        UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqvis;
        UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
WHEN 'loc' THEN
    CASE @news
    WHEN 'emp' THEN
        UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqloc;
        UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'vis' THEN
        UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqvis;
        UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
WHEN 'vis' THEN
    CASE @news
    WHEN 'emp' THEN
        UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqvis;
        UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'loc' THEN
        UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqloc;
        UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
END CASE;
END

每次执行此过程时,我都会收到以下错误:“未找到 CASE 语句的案例” 我做错了什么?

【问题讨论】:

  • 它是否找到了不在您的 WHEN 语句中的案例?您是否尝试将 ELSE 添加到您的语句中以查看它是否在任何地方都失败了?

标签: mysql stored-procedures case-statement


【解决方案1】:

这是 MySQL 特有的问题。
在 MySQL 中,一个 case 必须总是有一个有效的匹配,因此一个 ELSE 子句。
并且由于匹配后的语句不能为空,你可以像这样用一个空块来填充它:

ELSE BEGIN END;

所以一个有效的情况是,例如:

CASE @news  
  WHEN 'emp' THEN  
    UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqvis;  
  WHEN 'loc' THEN  
    UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqloc;  
  ELSE BEGIN END;  
END CASE;

【讨论】:

    【解决方案2】:

    该错误意味着“case”语句之一找不到匹配项。您确定变量 olds 和 news 包含正确的值吗?尝试将每种情况下的最后一个“何时”更改为“其他”,然后查看您的程序是否有效。

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 2019-06-27
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多