Вопрос по goto, mysql, stored-functions – Как использовать метку goto в хранимой функции MySQL

4

Я хотел бы использовать goto в хранимой функции MySQL. Как я могу использовать? Пример кода:

if (action = 'D') then
    if (rowcount > 0) then
        DELETE FROM datatable WHERE id = 2;      
    else
       SET p=CONCAT('Can not delete',@b);
       goto ret_label;
    end if;
end if;

Label: ret_label;
return 0;

Ваш Ответ

2   ответа
7

которые не могут быть реализованы в MySQL, например, переход назад в коде (и это тоже хорошо).

Но для чего-то вроде вашего примера, где вы хотите перепрыгнуть из всего в финальную серию операторов, вы можете создать блок BEGIN / END, окружающий код, из которого выскочите:

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;

Так как ваш код - это всего лишь несколько вложенных IF, конструкция в данном коде не нужна. Но для LOOP / WHILE / REPEAT имеет больше смысла избегать нескольких операторов RETURN внутри цикла и консолидировать окончательную обработку (немного похоже на TRY / FINALLY).

1

Похожие вопросы