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).