12

複数の CASE ステートメントを持つストアド プロシージャを作成しようとしています。次のストアド プロシージャがあります。

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ステートメントのケースが見つかりません」というエラーが表示されます。何が間違っていますか?

4

2 に答える 2

28

これは MySQL 固有の問題です。
MySQL では、ケースには常に有効な一致が必要であるため、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;
于 2013-08-22T08:48:43.340 に答える
4

このエラーは、「case」ステートメントの1つが一致するものを見つけることができないことを意味します。変数oldsとnewsに正しい値が含まれていることを確認しますか?いずれの場合も、最後の「when」を「else」に変更して、手順が機能するかどうかを確認してください。

于 2011-10-24T20:11:36.780 に答える