Mysql
 sql >> Database >  >> RDS >> Mysql

Come usare l'etichetta goto nella funzione memorizzata MySQL

Ci sono casi GOTO che non possono essere implementati in MySQL, come saltare indietro nel codice (e anche una buona cosa).

Ma per qualcosa come il tuo esempio in cui vuoi saltare da tutto a una serie finale di istruzioni, puoi creare un blocco BEGIN / END che circonda il codice da cui saltare:

aBlock:BEGIN
    if (action = 'D') then
        if (rowcount > 0) then
            DELETE FROM datatable WHERE id = 2;      
        else
           SET p=CONCAT('Can not delete',@b);
           LEAVE aBlock;
        end if;
    end if;
END aBlock;
return 0;

Poiché il tuo codice è solo alcuni IF nidificati, il costrutto non è necessario nel codice fornito. Ma ha più senso che LOOP/WHILE/REPEAT eviti più istruzioni RETURN dall'interno di un ciclo e consolidi l'elaborazione finale (un po' come TRY/FINALLY).