8

我想在 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;
4

2 回答 2

10

有些 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;

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

于 2014-01-12T05:22:12.763 回答
1

MySQL 存储过程中没有 GOTO。可以参考这个帖子: MySQL :: Re: Goto Statement

于 2012-06-21T08:37:35.207 回答