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

标签 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;

最佳答案

有些 GOTO 情况无法在 MySQL 中实现,例如在代码中向后跳转(这也是一件好事)。

但是对于像您的示例这样的东西,您想要跳出所有内容以跳出最后一系列语句,您可以围绕要跳出的代码创建一个 BEGIN/END block :

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

关于mysql - 如何在 MySQL 存储函数中使用 goto 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134300/

相关文章:

mysql - 主键搜索有多个结果

javascript - 在没有额外标志的情况下解决 JavaScript 缺少 goto 的问题

java - JDBC 调用 Oracle 存储函数 - "table of struct"类型的 IN 参数

mysql - 如何修复mysql中的 "ERROR 1241 (21000): Operand should contain 1 column(s)"?

Mysql 存储函数性能问题

c++ - Mysql 连接器 connect() 问题

mysql - WHERE 子句中的单列多行

php - 使用 PHP 将 session 变量添加到 MYSQL 查询中

c++ - 将分屏多人游戏添加到 C++ 游戏

C GOTO 命令创建无限循环