【问题标题】:How to use goto label in MySQL stored function如何在 MySQL 存储函数中使用 goto 标签
【发布时间】:2023-03-27 14:03:01
【问题描述】:

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

【问题讨论】:

    标签: mysql goto stored-functions


    【解决方案1】:

    有些 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)更有意义。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-27
        • 1970-01-01
        相关资源
        最近更新 更多