Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o rótulo goto na função armazenada do MySQL


Existem casos GOTO que não podem ser implementados no MySQL, como pular para trás no código (e uma coisa boa também).

Mas para algo como o seu exemplo, onde você deseja pular de tudo para uma série final de instruções, você pode criar um bloco BEGIN / END em torno do código para pular:
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;

Como seu código é apenas alguns IFs aninhados, a construção é desnecessária no código fornecido. Mas faz mais sentido para LOOP/WHILE/REPEAT evitar várias instruções RETURN de dentro de um loop e consolidar o processamento final (um pouco como TRY / FINALLY).