Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwenden Sie das goto-Label in der gespeicherten MySQL-Funktion

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