【问题标题】: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)更有意义。