2011-10-24 16 views
7

nel tentativo di creare una stored procedure che hanno multipli istruzioni case ho la stored procedure seguente:Mysql CASE non trovate in istruzione case su una stored procedure

BEGIN 
CASE @olds 
WHEN 'emp' THEN 
    CASE @news 
    WHEN 'loc' THEN 
     UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'vis' THEN 
     UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
WHEN 'loc' THEN 
    CASE @news 
    WHEN 'emp' THEN 
     UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'vis' THEN 
     UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
WHEN 'vis' THEN 
    CASE @news 
    WHEN 'emp' THEN 
     UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'loc' THEN 
     UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
END CASE; 
END 

Ogni im esecuzione di questa procedura ho ottenuto la seguente l'errore è: "Caso non trovato per l'istruzione CASE" Cosa sto facendo male?

+1

E ' trovare un caso che non sia nelle tue dichiarazioni WHEN? Hai provato ad aggiungere ELSE nelle tue dichiarazioni per vedere se sta cadendo da qualche parte? – Genzume

risposta

0

Questo errore indica che una delle istruzioni "case" non riesce a trovare una corrispondenza. Sei sicuro che variabili vecchie e notizie contengano valori corretti? Cerca di cambiare l'ultimo 'quando' in ogni caso in 'else' e verifica se la tua procedura funziona allora.

17

Questo è un problema specifico di MySQL.
In MySQL, un caso deve sempre avere una corrispondenza valida, quindi una clausola ELSE.
E come la dichiarazione dopo il match non può essere vuoto, si può riempire con un blocco vuoto in questo modo:

ELSE BEGIN END; 

Quindi un valido caso sarebbe, per esempio:

CASE @news 
    WHEN 'emp' THEN 
    UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
    WHEN 'loc' THEN 
    UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
    ELSE BEGIN END; 
END CASE;