sql >> Database >  >> RDS >> Mysql

Hoe goto-label te gebruiken in de MySQL-opgeslagen functie?

Er zijn GOTO-gevallen die niet in MySQL kunnen worden geïmplementeerd, zoals achteruit springen in code (en maar goed ook).

Maar voor iets als uw voorbeeld, waarbij u uit alles naar een laatste reeks instructies wilt springen, kunt u een BEGIN / END-blok maken rond de code om uit te springen:

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;

Aangezien uw code slechts enkele geneste IF's is, is de constructie niet nodig in de gegeven code. Maar het is logischer voor LOOP/WHILE/REPEAT om meerdere RETURN-instructies van binnen een lus te vermijden en de uiteindelijke verwerking te consolideren (een beetje zoals TRY / FINALLY).



  1. ~/.psqlrc bestand voor DBA's

  2. Duplicaat uit een tabel verwijderen

  3. Operators voor het extraheren van JSON-subcomponenten

  4. Evalueren wanneer een expressie in een query wordt geëvalueerd