Es gibt GOTO-Fälle, die in MySQL nicht implementiert werden können, wie das Rückwärtsspringen im Code (und das ist auch gut so).
Aber für so etwas wie Ihr Beispiel, wo Sie aus allem zu einer letzten Reihe von Anweisungen springen möchten, können Sie einen BEGIN / END-Block erstellen, der den Code umgibt, aus dem herausgesprungen werden soll:
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;
Da Ihr Code nur aus einigen verschachtelten IFs besteht, ist das Konstrukt im angegebenen Code nicht erforderlich. Für LOOP/WHILE/REPEAT ist es jedoch sinnvoller, mehrere RETURN-Anweisungen innerhalb einer Schleife zu vermeiden und die abschließende Verarbeitung zu konsolidieren (ähnlich wie TRY / FINALLY).