如何在MySQL存储函数中使用goto标签

SuS*_*nda 5 mysql goto stored-functions

我想在MySQL存储函数中使用goto.我该怎么用?示例代码是:

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;
Run Code Online (Sandbox Code Playgroud)

dkl*_*oke 7

有一些GOTO案例无法在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;
Run Code Online (Sandbox Code Playgroud)

由于您的代码只是一些嵌套的IF,因此在给定代码中不需要该构造.但是对于LOOP/WHILE/REPEAT更有意义的是避免循环内的多个RETURN语句并合并最终处理(有点像TRY/FINALLY).


pat*_*hoi 1

MySQL 存储过程中没有 GOTO。你可以参考这篇文章: MySQL::Re: Goto Statement