Są przypadki GOTO, których nie można zaimplementować w MySQL, jak przeskakiwanie kodu wstecz (i to też dobrze).
Ale dla czegoś takiego jak twój przykład, w którym chcesz przeskoczyć ze wszystkiego do końcowej serii instrukcji, możesz utworzyć blok BEGIN / END otaczający kod, z którego chcesz wyskoczyć:
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;
Ponieważ twój kod to tylko niektóre zagnieżdżone elementy IF, konstrukcja jest w danym kodzie niepotrzebna. Jednak bardziej sensownym rozwiązaniem dla LOOP/WHILE/REPEAT jest uniknięcie wielu instrukcji RETURN z wnętrza pętli i skonsolidowanie przetwarzania końcowego (trochę jak TRY / FINALLY).